微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译时间 if else in c++ 11

如何解决编译时间 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 来删除不需要的分支。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。