带有参数复制构造函数的C ++模板类

时间:2015-04-11 15:39:43

标签: c++ templates copy-constructor

我有一个c ++泛型类,如下所示:

template <class T, int N> class TwoDimArray{
    private:
        T tda_[N][N];
        int n_;
    public:
        TwoDimArray(T tda[][N]){
           ..
        }
        ~TwoDimArray(){
           ..
        }
        ..
}

我如何编写一个复制构造函数,我可以这样调用它:

int a1[][2] = { 1, 2, 3, 4 };
TwoDimArray <int, 2> tdm1(a1);
TwoDimArray tdm1Copy (tmd1); // or whatever the correct form is

我希望我很清楚。

1 个答案:

答案 0 :(得分:1)

您的代码中有很多拼写错误,但声明复制构造函数很简单:

TwoDimArray(const TwoDimArray& rhs){/*implement it here*/}

复制构造函数是模板类的一部分,因此您必须在复制时指定模板类型

TwoDimArray<int, 2> tdm1Copy (tdm1); // specify <int,2> as the type

或使用auto

auto tdm1Copy(tdm2);

以下完整的工作示例:

#include <iostream>

template <class T, int N> class TwoDimArray {
private:
    T tda_[N][N];
    int n_;
public:
    TwoDimArray(T tda[][N]) {
        // implement
    }
    ~TwoDimArray() {
        // implement
    }
    TwoDimArray(const TwoDimArray& rhs) // don't really need this
    {
        // implement
    }
};

int main()
{
    int a1[][2] = { 1, 2, 3, 4 };
    TwoDimArray <int, 2> tdm1(a1);
    TwoDimArray<int, 2> tdm1Copy (tdm1); // specify <int,2> as the type
}

除非您是为了完成家庭作业或学习目的而这样做,否则只需使用std::vector<std::vector<T>>来“模拟”二维数组。


附加注释:由于您的类包含数组(而不是指针,它们不相同),因此您不需要复制构造函数。默认的复制构造函数为您完成,即按元素复制数组元素。所以,只需完全摆脱复制构造函数,让编译器生成一个默认值。