作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能否使用 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/
我是一名优秀的程序员,十分优秀!