c++ - 乘法如何用于 C++ 枚举?

标签 c++ templates

我们有一个用于数字数据类型的模板转换函数。它内部包含一个构造,使其无法使用指针等类型进行编译。

template<class To, class From>
To ConvertTo( From what )
{
    assert( 2 * what == what * 2 ); // this will not compile for pointers
    //skipped
}

当枚举作为第二个模板参数传递时,此函数可以正常编译和工作:

enum TSomeEnum {
   SE_First,
   SE_Second       
};

TSomeEnum enumValue = SE_First;
int result = ConvertTo<int>( enumValue );

以上代码在 VC++7 上按预期编译和运行。

* 操作如何用于枚举?这是一种未定义行为的方式吗?

最佳答案

枚举降级为整数(旧的 C 功能),这就是为什么它可以工作。我不认为这是未定义的行为,尽管它可能是您不希望/不期望的那种行为。

关于c++ - 乘法如何用于 C++ 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193586/

相关文章:

c++ - Windows CE - 禁用 CComboBox 突出显示

c# - 将 recv() 和 send() 的缓冲区从 C# 传递到 C++

c++ - 如何获取字符串指针的值?

用于列出所有可能的模板实现的 C++ 解决方法

c++ - CPP 元编程 : contains function for tuples

c++ - Eclipse:编译,但 CODAN(内部代码分析器)为 C++ 11 <includes> 中的函数提供错误

c++ - OpenCV:为 HIT-MISS 创建方形结构元素

c++ - 使用模板检查结构中的字段,启用函数,如果失败则给出错误消息?

c++ - 错误 : this declaration has no storage or type specifier

c++ - 我怎样才能让我的模板函数看到以后定义的其他全局方法?