我写了一个类来测试" type == type"但是当type没有operator ==;
时失败Spring
有人可以帮忙吗? 或者写一个这样的课是不可能的......
答案 0 :(得分:7)
您的第一次test
重载不应该是一个模板,因为_Type
无法推断出来并且无论如何都不重要:
double _test(...){
return 0;
}
使用C ++ 17 std::void_t
(你可以很容易地为C ++ 11实现),你可以用更少的样板来实现同样的目的:
template <typename T, typename = void>
struct has_equal_to : std::false_type{};
template <typename T>
struct has_equal_to<T,
std::void_t<decltype(std::declval<T>() == std::declval<T>())>>
: std::true_type{};
或者您可以使用std::experimental::is_detected
甚至更少:
template <typename T>
using equal_to_t = decltype(std::declval<T>() == std::declval<T>());
template <typename T>
using has_equal_to = std::experimental::is_detected<equal_to_t, T>;
在一个不相关的说明中,你不应该使用以下划线开头的名字;他们将保留给实施。