gpt4 book ai didi

c++ - 有没有办法在 std::conditional fail 上给出更好的错误?

转载 作者:行者123 更新时间:2023-11-30 02:31:46 24 4
gpt4 key购买 nike

假设我有一个函数:

template<typename T, typename Dummy =
typename std::enable_if<std::is_integral<T>::value,int>::type >
void foo(T var0, T var1);

此函数仅在 T 是某种整数类型时创建。唯一的问题是,如果我尝试在非整数类型上使用它,我会得到这个巨大的错误。

有什么方法可以创建在类似情况下发生的自定义错误字符串吗?

最佳答案

只需放弃 Dummy 技巧并使用 static_assert,这就像教科书用例:

#include <type_traits>

template <class T>
void fun(T t){
static_assert(std::is_integral<T>::value, "fun requires integral");
}

int main(){
fun(1);
fun(2.);
}

失败并显示非常明确的消息:

main.cpp: In instantiation of 'void fun(T) [with T = double]':
main.cpp:10:11: required from here
main.cpp:5:5: error: static assertion failed: fun requires integral
static_assert(std::is_integral<T>::value, "fun requires integral");
^~~~~~~~~~~~~

在或多或少遥远的 future ,2020 年左右,您还可以使用 concepts为此,如果您想尝试一下,gcc 中有一个实验性实现。

关于c++ - 有没有办法在 std::conditional fail 上给出更好的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198870/

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