问题描述
template <int N>
void foo() {
if (N < 2) {
bar1();
} else {
bar2();
}
}
我想在 C++11 的编译期间推断 if else 以提高函数效率。我想像这样添加一个额外的模板 bool 变量 -
template <int N,bool I = (N < 2),std::enable_if<I>>
void foo() {
bar1();
}
template <int N,std::enable_if<!I>>
void foo() {
bar2();
}
不确定这是否是正确的方法。任何人都可以帮忙吗?
解决方法
在 C++11 中,您可以使用 enable_if
编写 2 个重载
template <int N,typename std::enable_if<N < 2,int*>::type = nullptr>
void foo() {
bar1();
}
template <int N,typename std::enable_if<N >= 2,int*>::type = nullptr>
void foo() {
bar2();
}
这是一个demo
请注意,这不太可能给您带来任何性能优势。编译器将能够在 N
条件中使用模板参数 if
来删除不需要的分支。