首页 > 解决方案 > c++ 11 中的 if else 编译时间

问题描述

我有这个模板功能 -

template <int N> 
void foo() {
  if (N < 2) {
    bar1();
  } else {
    bar2();
  }
}

我想在 C++11 的编译期间推断 if else 以使函数高效。我想像这样添加一个额外的模板布尔变量 -

template <int N, bool I = (N < 2), std::enable_if<I>> 
void foo() {
    bar1();
}
template <int N, bool I = (N < 2), std::enable_if<!I>> 
void foo() {
    bar2();
}

不确定这是否是正确的方法。有人可以帮忙吗?

标签: c++c++11templates

解决方案


在 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();
}

这是一个演示

请注意,这不太可能给您带来任何性能优势。编译器将能够Nif条件中使用模板参数来删除不需要的分支。


推荐阅读