不同模板之间的c ++拷贝构造函数

时间:2015-10-28 14:04:32

标签: c++ templates copy

我有一个模板类A.我想要做的是在A模板T1和A模板T2之间写一个复制构造函数。我该如何解决这个问题?以下是struct header中的一些示例代码:

template <typename T>
struct A {
    A(const A<T>& other); // copy from same type T
    template <typename T2>
    A(const A<T2>& other); // copy from different type T2
}

我将如何在.cpp文件中实现此功能?

编辑:我真正的意思是:“我将如何在课堂定义之外实现这一目标?” (语法问题)

3 个答案:

答案 0 :(得分:4)

定义模板类的模板成员函数的语法并不是很明显。您需要有两个模板参数列表;一个用于类,一个用于函数:

template <typename T>  //class template parameters
template <typename T2> //function template parameters
A<T>::A (const A<T2>& other) {
    //...
}

请注意,模板需要在头文件中实现,因此您无法将其放在.cpp中。

答案 1 :(得分:2)

您无法在.cpp文件中定义模板功能。但是在标题中,除了类定义之外,你可以

template<typename T>
template<typename T2>
A<T>::A(const A<T2&>& other)
{
   // implementation
}

答案 2 :(得分:1)

您可以将其他构造函数本身设为模板:

template< class T > class A
{
public:
    A()
    {

    }

    A(const A<T> & other)
    {
        cout << "T" << endl;
    }

    template<class T1> A(const A<T1> & other)
    {
        cout << "T1" << endl;
    }
};

int main()
{
    A<int> a1;
    A<int> a2 = a1; // prints "T"
    A<double> a3 = a1; // prints "T1"
    return 0;
}