簡體   English   中英

如何使用預處理器指令比較兩種類型是否相等?

[英]How can I compare if two types are equal using preprocessor directives?

我有一個允許動態設置特定值的類。 它有多個構造函數,如下所示:

class Property {
  enum PropertyType { INT32, UINT32, UINT64, OBJECTSIZE, ... };
public:
  Property(int32_t value_) : type(INT32), value(value_) {}
  Property(uint32_t value_) : type(UINT32), value(value_) {}
  Property(uint64_t value_) : type(UINT64), value(value_) {}
  Property(size_t value_) : type(OBJECTSIZE), value(value_) {}

private:
  std::any value;
  PropertyType type;
};

除了一部分之外,這非常有效。 根據編譯器的不同, size_t值可以是不同的類型。 例如,在帶有 clang 的 macOS 上, size_t是一個自定義類型,而在帶有 GCC 的 Linux 上, size_tuint64_t 結果,由於兩個構造函數之間的類型沖突,我收到編譯器錯誤。

如果類型匹配,有沒有辦法添加預處理器條件以禁用size_t構造函數? 就像是:

#if uint64_t != size_t or uint32_t != size_t
  Property(size_t value_) : type(OBJECTSIZE), value(value_) {}
#endif

如何使用預處理器指令比較兩種類型是否相等?

你不能 - 預處理器不知道類型。

除了一部分之外,這非常有效。

size_t與其他相同時,使用 SFINAE 禁用重載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM