如何在C++表达式语句中使用if constexpr?
在表达式语境里实现constexpr条件判断
不用折腾模板特化,直接用constexpr函数封装编译期分支逻辑就能解决问题,完美适配只能用表达式的宏场景:
步骤1:写个带constexpr分支的工具函数
如果只是需要条件调用函数,写个返回无意义常量的constexpr函数(保证是合法表达式):
constexpr int conditional_dispatch(int flag) { if constexpr (flag == 1) { call_func(); // FLAG=1时执行的逻辑 } // FLAG=0时啥也不做,或者加else分支写其他逻辑 return 0; }
要是需要else分支,直接补进去就行:
constexpr int conditional_dispatch(int flag) { if constexpr (flag == 1) { call_func(); } else { fallback_func(); // FLAG=0时的逻辑 } return 0; }
步骤2:在模板函数里调用这个函数
把模板参数FLAG传给constexpr函数,直接作为表达式塞进宏里:
template <int FLAG> void f() { SOME_MACRO_ONLY_ALLOW_EXPRS(conditional_dispatch(FLAG)); }
为什么这能行?
if constexpr会在编译期直接把没用的分支删掉:比如FLAG=0时,call_func()的代码会被完全剔除,不会有任何运行期负担。- 整个函数调用是标准表达式,完全满足宏的要求,不会报
expected expression错误。
内容的提问来源于stack exchange,提问作者calvin
相关产品推荐
相关产品推荐

