gpt4 book ai didi

c++ - 使用 SFINAE 但不要产生编译错误

转载 作者:太空狗 更新时间:2023-10-29 20:13:38 24 4
gpt4 key购买 nike

我的程序生成具有“类型”和标识符的随机字符串。像这样:

float       lHTY8Au8b9 = float();
int dO3PNUInH6 = int();
float B_MtShimak = float();
float hgi_TzaVEv = float();
double mfW8kr6h6q = double();
std::string lSLj9antfj = std::string();
char MQkeARWYTL = char();
char Oe7G_ZRJy6 = char();
float qUwmOWeilK = float();
double FJYIODwQfx = double();

然后我有以下内容来查看是否可以添加两个任意变量:

template <typename A, typename B>
typename std::enable_if<std::is_convertible<A, B>::value, decltype(A() + B())>::type
try_to_add(A a, B b) {
return a + b;
}

当然,它可以工作,因为我收到以下错误:

main.cpp:51:54: error: no matching function for call to ‘try_to_add(double&, std::string&)’

try_to_add<double,std::string>(mfW8kr6h6q,lSLj9antfj);

然而,我想要的是一个不会导致编译错误的候选列表。我无法对模板参数进行硬编码,因为它只接受整数,而且我无法检查生成器程序内部,因为它们只是字符串,并且尝试将 try_to_add 与不可转换类型一起使用将导致编译错误。我知道 SFINAE 是错误的方法,但有没有办法让 try_to_add 什么也不做,而不是生成编译错误?

Coliru

最佳答案

使用不执行任何操作的逆条件添加另一个覆盖。

template <typename A, typename B>
typename std::enable_if<!std::is_convertible<A, B>::value>::type
try_to_add(A, B) { }

关于c++ - 使用 SFINAE 但不要产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201197/

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