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

C++ template class with argument copy constructor

我有一个 C++ 泛型 class,看起来像这样:

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

希望我说清楚了。

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

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

复制构造函数是模板的一部分class,所以复制时必须指定模板类型

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>> 到 "simulate" 二维数组。


补充说明:因为你的class包含一个数组(而不是指针,它们不一样),你不需要复制构造函数。默认的复制构造函数会为你做这件事,即逐个元素复制数组。所以,完全摆脱复制构造函数,让编译器生成一个默认的。