我有一个模板类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文件中实现此功能?
编辑:我真正的意思是:“我将如何在课堂定义之外实现这一目标?” (语法问题)答案 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;
}