Aga*_*ade 2 c++ syntax templates
我有一个使用函数模板专为性能的原因,所以该功能将只做什么它需要做的,而不是不断地加载并读取布尔检查羯羊它需要做的东西或者不是CUDA(C++)代码.
所有模板参数都是布尔值.在启动内核时,CPU检查布尔值并启动相应的,我相信它被称为"实例化"内核模板.我理解这会给出指数代码大小的增长,但我的问题是关于其他的东西:启动内核模板涉及2 ^ n if语句,是否有更聪明的语法?
例如,如果n = 2:
if(bool1){
if(bool2){
<true,true>func();
}
else{
<true,false>func();
}
}
else{
if(bool2){
<false,true>func();
}
else{
<false,false>func();
}
}
Run Code Online (Sandbox Code Playgroud)
当n = 10时,它变得不可接受,是否有语法来避免这种恐怖?
例如我试过,
<bool1 ? true:false,bool2 ? true:false>func()但编译器不喜欢它...
将布尔标志更改为模板参数似乎谈论类似的问题,但OP不仅仅是布尔值,并且提供的解决方案看起来比问题更糟糕,坦率地说,我不明白它的一个词.
你可以func像这样添加一个重载:
template< bool... Bs >
void func()
{
// Implement func with compile-time Bs...
}
template< bool... Bs, typename... Ts >
void func( bool b, Ts... ts )
{
if( b ) {
func< Bs..., true >( ts... );
}
else {
func< Bs..., false >( ts... );
}
}
int main()
{
// call func< true, false, true, true >();
func( true, false, true, true );
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理是将运行时布尔参数逐个转换为编译时参数.