如何在模板派生类中调用模板基类的构造函数?

时间:2014-07-31 16:41:14

标签: c++ templates

假设我有一个基本模板类Array:

template <class T = Point> class Array{
    protected:
        T* m_data;
        int size;
    public:
        Array();    // constructor
        Array(int n);   // constructor
        Array(const Array<T>& s_data);  //Copy Constructor
        // and so on..
}

它有构造函数和析构函数。我还有一个派生模板类NumericArray:

template <class T = int> 
class NumericArray:public Array<T>{

    public:
        NumericArray();
        NumericArray(int n);
        NumericArray(const NumericArray<T>& s_data);

        ~NumericArray();    //destructor

};

因为我需要初始化基类中的私有成员所以我需要在派生构造函数中调用基础构造函数。但是怎么样?我试过了

template <class T>
NumericArray<T>::NumericArray(int n){
    Array<T>(n);  // it will think I create a Array<T> names n
}

template <class T>
NumericArray<T>::NumericArray(int n):Array(n){
    // No field in NumericalArray called Array
}

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

合并您的解决方案,使用初始化列表和全名:

NumericArray<T>::NumericArray(int n)
 : Array<T>(n)
{

}

此外,由于它们成为依赖名称,因此必须像以下一样访问Array的字段:

Array<T>::m_data; // inside a NumericArray method

另外,如果不是某些实验或家庭作业,请使用std :: vector而不是指针和大小。