我们有一个模板转换函数,用于与numeric数据类型一起使用.它里面包含一个构造,它不能用像指针这样的类型进行编译.
template<class To, class From>
To ConvertTo( From what )
{
assert( 2 * what == what * 2 ); // this will not compile for pointers
//skipped
}
Run Code Online (Sandbox Code Playgroud)
当枚举作为第二个模板参数传递时,此函数可以编译并正常工作:
enum TSomeEnum {
SE_First,
SE_Second
};
TSomeEnum enumValue = SE_First;
int result = ConvertTo<int>( enumValue );
Run Code Online (Sandbox Code Playgroud)
上面的代码在VC++ 7上按预期编译和运行.
操作*如何用于枚举?这是未定义行为的一种方式吗?
枚举降级为整数(旧的C功能),这就是为什么这是有效的.我不认为它是未定义的行为,尽管它可能是你不想要/期望的那种行为.