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