我读到有关Pillow==5.4.1
的信息:
基于类型的任意属性的函数重载
因此,我试图通过var arr = str.replace(" ", "").split(",");
var uniqueArray = arr.filter((v, i, arr) => arr.indexOf(v) === i);
重载类ctor(如下所示),但我收到错误消息,说std::enable_if
不能用于禁用声明,而当我使用{{1} }:
enable_if
因此可以使用enable_if
使ctor超载。
答案 0 :(得分:3)
问题是当实例化cls<int>
时,总是会从第二个构造函数过度请求中获得失败的要求,即std::enable_if< std::is_same<T, char>::value >::type
与T
为int
。与cls<char>
相同。
您可以使构造函数模板使SFINAE生效;它将摆脱重载集中的模板专业化,并且不会导致编译错误。例如
template <typename X = T>
cls (X a, typename std::enable_if< std::is_same<X, int>::value >::type * Dummy = 0)
{
std::cout << "Ctor for int\n";
}
template <typename X = T>
cls (X a, typename std::enable_if< std::is_same<X, char>::value >::type * Dummy = 0)
{
std::cout << "Ctor for char\n";
}
答案 1 :(得分:1)
您这里似乎不需要enable_if
,只需一个常规构造函数即可:
cls(T a) { std::cout << "Ctor for T\n"; }
要禁用模板类专门化,请不要提供其定义:
template<> class cls<void>; // disabled specialization.