我可以以某种方式使用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静态成员,具体取决于truefalse还是Tenum

    关于c++ - 我可以使用typeid()来了解类型是否为枚举吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10833600/

    10-11 23:05
    查看更多