是否有一种方法可以决定某个东西是否可以进行constexpr评估,并将结果用作constexpr布尔值? 我的简化用例如下:
有没有办法判断一个东西是否能够被 constexpr 评估, 并且把结果用作 constexpr 布尔值呢?我的简单应用场景如下:
template <typename base>
class derived
{
template<size_t size>
void do_stuff() { (...) }
void do_stuff(size_t size) { (...) }
public:
void execute()
{
if constexpr(is_constexpr(base::get_data())
{
do_stuff<base::get_data()>();
}
else
{
do_stuff(base::get_data());
}
}
}
我的目标是学习C++2a。
我发现了以下Reddit串,但我不太喜欢宏定义。https://www.reddit.com/r/cpp/comments/7c208c/is_constexpr_a_macro_that_check_if_an_expression/
if constexpr
的主体只有在编译时if constexpr
中的表达式为真时才会被评估。这是您要找的吗? - Jesper Juhlstd::is_constant_evaluated
,这个函数可以判断当前代码是否在常量表达式中被评估。 - 0x5453