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

Par*_*ita 8 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..
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

        ~NumericArray();    //destructor

};
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

ere*_*non 10

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

Array<T>::m_data; // inside a NumericArray method
Run Code Online (Sandbox Code Playgroud)

此外,如果它不是一些实验或家庭作业,请使用std :: vector而不是指针和大小.