【发布时间】:2019-08-12 18:53:58
【问题描述】:
有没有一种方法可以决定是否可以对某事物进行 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中的表达式在编译时为真时才会被计算。这就是你要找的吗? -
但是如果 if constexpr([test]) 中的测试在编译时无法评估怎么办?
-
也许你可以用
std::is_constant_evaluated做点什么? -
@AartStuurman:什么是
do_stuff,它可以在编译时或运行时运行,但它本身不应该是constexpr?将其设为constexpr函数,并将get_data的值作为参数传递给它不是更有意义吗?
标签: c++ template-meta-programming constexpr c++20 if-constexpr