簡體   English   中英

如何編寫一個類型特征方法

[英]How to write a type trait method

我定義了一個模板化的類( DataArray<T> ),我想定義一個min()函數來計算整數類型數組( doublefloatint ,...)或復雜類型數組( std::complex<double> )的最小值std::complex<double>std::complex<float> ,...)。

我試圖使用類型特征來選擇正確的函數。 盡管這里有很好的討論,我的代碼不會編譯:

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

問題是什么? 這是我的代碼的最小部分:

#include <iostream>
#include <vector>
#include <complex>
#include <type_traits>

template <typename T>
class DataArray {
public:
    DataArray(T * data) : m_data(data) {}

    template<typename T>
    using isComplex = std::is_same<T, std::complex<typename T::value_type>>;

    template <typename T>
    typename std::enable_if<isComplex<T>::value>::type min() {
        std::cout << "Min for complex" << std::endl;
    }

    template <typename T>
    typename std::enable_if<std::is_arithmetic<T>::value>::type min() {
        std::cout << "Min for arithmetic values." << std::endl;
    }

private:
    T * m_data;
};



int main()
{
    double v1[2] ={ 1., 2.};
    DataArray<double> d1(v1);

    d1.min();  // min function for double : **compilation error** 

    std::complex<double> v2[2] = { { 1, 2 },{ 3, 4 } };
    DataArray<std::complex<double>> d2(v2);

    d2.min();  // min function for complex<double> : compilation error 
}

模板參數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;
}

生活

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM