【发布时间】:2021-10-08 20:37:19
【问题描述】:
我有一长串if constexpr 语句,如果它们都不成功,我想触发编译时错误。
具体来说,我有一个抽象语法树,我想将其结果转换为我可能需要的一组特定类型。我有 AsInt()、AsDouble() 等工作,但我需要能够根据提供的类型更动态地这样做。
就目前而言,我已经编写了一个模板化的 As() 成员函数,但它的错误检查很笨拙。具体来说,使用静态断言需要一个笨拙的测试条件。这是一个简化的版本:
template <typename T>
T As() {
if constexpr (std::is_same_v<T,int>) return AsInt();
if constexpr (std::is_same_v<T,double>) return AsDouble();
...
if constexpr (std::is_same_v<T,std::string>) return AsString();
static_assert( std::is_same_v<T,int>
|| std::is_same_v<T,double>
|| ...
|| std::is_same_v<T,std::string>,
"Invalid template type for As()" );
}
如果所有条件都失败,是否有更简单的方法来触发静态断言(或等效)?
【问题讨论】:
标签: c++ typetraits static-assert if-constexpr