编译时间 if else in c++ 11

问题描述

我有这个模板函数 -

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 来删除不需要的分支。