我可以以某种方式使用typeid
/ type_info
来检测某种类型的enum
(任何枚举器)吗?
下面的方法可以很好地检测变量是否具有int
类型
template<typename T>
bool is_int( T var )
{
return strcmp( typeid(T).name(), typeid(int).name() ) == 0;
}
但我不能对枚举使用类似的版本-name()返回的字符串在Linux和Windows之间有所不同
template<typename T>
bool is_enum( T var )
{
// can I use typeid here?
// eg. string_contains( typeid(var).name(), "enum" );
}
我已经在Boost中看到了模板化版本,但是我们还不能使用该库...
最佳答案
您的方法存在两个问题:
您假设
如果您想知道变量的静态类型,那么编译时机制可能是最好的。有一些特定的C++ 11特性:
std::is_enum<T>
具有value
静态成员,具体取决于true
是false
还是T
或enum
。关于c++ - 我可以使用typeid()来了解类型是否为枚举吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10833600/