c – 使用SFINAE但不创建编译错误
发布时间:2020-12-16 09:49:07 所属栏目:百科 来源:网络整理
导读:我的程序生成具有“类型”和标识符的随机字符串.像这样: float lHTY8Au8b9 = float();int dO3PNUInH6 = int();float B_MtShimak = float();float hgi_TzaVEv = float();double mfW8kr6h6q = double();std::string lSLj9antfj = std::string();char MQkeARWY
我的程序生成具有“类型”和标识符的随机字符串.像这样:
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) { } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读