[英]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_t
是uint64_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.