小编Nor*_*let的帖子

C++ 枚举类作为可变模板参数

我试图通过使用枚举类作为模板参数在编译时优化一些函数。

比如说

enum class Color { RED, BLACK };
Run Code Online (Sandbox Code Playgroud)

现在,我想定义一个方法

void myMethod<Color c> () {
 if( c == Color::RED ) { ... }
 if( c == Color::BLACK ) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我希望编译器myMethod在优化过程中制作 2 个副本并消除死代码(它适用于 CUDA 内核,因此速度和寄存器使用对我来说很重要)

但是,似乎当我使用

void doSomething( const Color c ) {
 myMethod<c>();
}
Run Code Online (Sandbox Code Playgroud)

MSVC 抱怨“表达式必须有一个常量值”。我期望编译器足够聪明,可以myMethod用枚举的每个可能版本编译一个版本。不是这样吗?我可以强迫它,没有一个丑陋的开关doSomething吗?

谢谢你的帮助 !

c++ enums templates

1
推荐指数
1
解决办法
1311
查看次数

标签 统计

c++ ×1

enums ×1

templates ×1