c++ - 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++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();
}
这是一个演示
请注意,这不太可能给您带来任何性能优势。编译器将能够N
在if
条件中使用模板参数来删除不需要的分支。
推荐阅读
- python-3.x - 为什么在尝试访问文件并且路径已设置时命令提示符会引发错误?
- javascript - 为什么chrome开发者工具中的缓存存储在离线模式下会变空
- python - Numpy 高级索引和基本索引
- alphablending - 使用 alpha 混合组件合成纹理
- ubuntu-16.04 - NTP:了解客户的请求
- ruby-on-rails - text_field 导轨的自定义标签?
- c# - 按下按钮并将其拖到屏幕上
- tags - Add specific tags to specifi products in a shopify
- javascript - 使用 for-of 更新数组对象
- c# - 下拉列表更改事件未在更新面板中触发