我定义了一个模板类(DataArray<T>
),我想定义一个min()
函数来计算整数类型数组的最小值(double
,float
,{ {1}},...)或复杂类型数组(int
,std::complex<double>
,...)。
我正在尝试使用特征类型来选择正确的功能。尽管进行了here的精彩讨论,但我的代码无法编译:
std::complex<float>
出什么问题了? 这是我的代码的最小部分:
DataArray<double> and DataArray<std::complex<double>>: no matching overloaded function
答案 0 :(得分:4)
成员模板的模板参数T
遮盖了类模板的模板参数T
。给他们起另一个名字;并为模板参数min()
指定默认值,否则无法推导它们。例如
template<typename X>
using isComplex = std::is_same<X, std::complex<typename X::value_type>>;
template <typename X = T>
typename std::enable_if<isComplex<X>::value>::type min() {
std::cout << "Min for complex" << std::endl;
}
template <typename X = T>
typename std::enable_if<std::is_arithmetic<X>::value>::type min() {
std::cout << "Min for arithmetic values." << std::endl;
}