C ++ 17添加了constexpr if(如果条件是constexpr则选择是否编译语句)http://en.cppreference.com/w/cpp/language/if
在C ++ 11中是否有模仿这种结构的有限形式的技巧?
如果在宏中需要以下构造:
#define ALLOCATE(x) if ({x is a constant}) allocate_n<x>() else allocate(x)
答案 0 :(得分:3)
假设您正在使用GCC或Clang,您可以使用__builtin_constant_p()
扩展程序:
#define ALLOCATE(x) \
__builtin_constant_p(x) \
? allocate_n<__builtin_constant_p(x) ? x : 0>() \
: allocate(x)
答案 1 :(得分:2)
在C ++ 11中是否有模仿这种结构的有限形式的技巧?
我能想象的最好的是替代
if constexpr ( cond ) statment-1 else statement-2;
与
foo<cond>( /* ? */ );
其中foo()
的定义如下
template <bool>
void foo (/* ? */);
template <>
void foo<true> (/* ? */)
{ /* statement-1 */ }
template <>
void foo<false> (/* ? */)
{ /* statement-2 */ }