gpt4 book ai didi

如果模板解析失败,则 C++ 强制编译器错误

转载 作者:行者123 更新时间:2023-12-04 08:10:29 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to assert that a constexpr if else clause never happen?

(3 个回答)


7 个月前关闭。




基于 this question我有以下模板化方法:

...
template <typename T>
const T& get() const {
if constexpr ( std::is_same_v<T, C1> )
return this->c1;
else if constexpr( std::is_same_v<T, C2> )
return this->c2;
else
throw std::logic_error("Tried to lookup from invalid type");
}
这有效 - 但在容器中未表示的类型的情况下 - 例如 Container::get<int>我想得到一个编译时错误而不是 throw std::logic_error()在运行时。我怎样才能做到这一点?

最佳答案

您可以添加 static_assert作为

template<class T> struct dependent_false : std::false_type {};

template <typename T>
const T& get() const {
if constexpr ( std::is_same_v<T, C1> )
return this->c1;
else if constexpr( std::is_same_v<T, C2> )
return this->c2;
else
static_assert(dependent_false<T>::value, "some error message");
}

关于如果模板解析失败,则 C++ 强制编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65990346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com