在类模板中,如何检测模板参数是否为枚举类型?

时间:2012-06-29 05:55:49

标签: c++ templates parameters enums detect

在类模板中,如何检测模板参数是否为枚举类型?

以下是我想要做的简化示例:http://ideone.com/3CafY。你将如何实现IsTEnum()以使输出正确?

我觉得应该有一个解决这个问题的boost函数,但我不允许在当前项目中使用boost(也不是标准库std :: functions)。
尽管如此,我也有兴趣知道使用boost的两种方法(即使解决方案不处理指针或const类型)。

2 个答案:

答案 0 :(得分:7)

您可以使用C ++ 11的std::is_enum来实现此目的。你说得对,the same solution是正确的。如果你不能使用boost或C ++ 11,你可以随时查看实现的灵感。

答案 1 :(得分:0)

如果您不能使用C ++ 11,请写:

#include <tr1/type_traits>
#include <iostream>
using namespace std;

int main() {
   cout << tr1::is_enum<int>::value << "\n";
   return 0;
}

命名空间tr1包含一些来自C ++ 11的头文件,可以在预标准C ++中使用。