我试图通过使用枚举类作为模板参数在编译时优化一些函数。
比如说
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吗?
谢谢你的帮助 !