我有时候会遇到这样的情况,基于一些 bool
值,我想调用两个返回不同类型的 constexpr
函数,并将其分配给 auto
常量。
不幸的是三元运算符需要类型“相似”。
我在下面的代码中有一个解决方法,但它非常冗长。有更好的方法吗?
#include <iostream>
#include <string>
constexpr int get_int(){
return 47;
}
constexpr std::string_view get_string(){
return "47";
}
constexpr bool use_str = false;
constexpr auto get_dispatch(){
if constexpr(use_str){
return get_string();
} else{
return get_int();
}
}
int main()
{
// what I want : constexpr auto val = use_str ? get_string():get_int();
// what works:
constexpr auto val = get_dispatch();
std::cout << val << std::endl;
}
get(int_tag)
,get(string_tag)
,然后val = get(tag{})
。std::false_type
和std::true_type
可以用作标签。 - Evgstd::variant
和std::visit
是constexpr
的,但不确定是否更好... - Jarod42