我很有意思这件事是如何在理论上起作用的.例:
#include <boost/type_traits/is_enum.hpp>
#include <iostream>
enum foo
{
AAA,
BBB
};
typedef foo bar;
struct sfoo {
enum bar {
CCC
};
};
int main()
{
std::cout << boost::is_enum<foo>::value << "\n"; // 1
std::cout << boost::is_enum<bar>::value << "\n"; // 1
std::cout << boost::is_enum<sfoo>::value << "\n"; // 0
std::cout << boost::is_enum<int>::value << "\n"; // 0
std::cout << boost::is_enum<sfoo::bar>::value << "\n"; // 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试探索源代码,但它太难了(宏+模板代码导航失败).有人可以通过理论探索它是如何工作的吗?我不知道如何实施它.
我想为所有枚举定义一个运算符<< <<,然后cout该值并打印它是这样的枚举:
码:
enum AnyEnum{A,B,C};
AnyEnum enm = A;
cout << enm <<endl;
Run Code Online (Sandbox Code Playgroud)
输出:
This is an enum which has a value equal to 0
Run Code Online (Sandbox Code Playgroud)
通过使用is_enum结构,我知道使用Boost库执行此操作的方法.但我不明白它是如何工作的.所以这就是为什么,一般来说,我感兴趣的是如何识别veriable是类类型,联合类型还是枚举(在编译时).