如何编写类型特征方法

时间:2018-11-26 15:15:22

标签: c++ templates typetraits

我定义了一个模板类(DataArray<T>),我想定义一个min()函数来计算整数类型数组的最小值(doublefloat,{ {1}},...)或复杂类型数组(intstd::complex<double>,...)。

我正在尝试使用特征类型来选择正确的功能。尽管进行了here的精彩讨论,但我的代码无法编译:

std::complex<float>

出什么问题了? 这是我的代码的最小部分:

DataArray<double> and DataArray<std::complex<double>>: no matching overloaded function

1 个答案:

答案 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;
}

LIVE