2015-10-28 112 views
0

我有一個模板類A.我想要做的是在模板T1和模板T2之間編寫一個拷貝構造函數。我該如何解決這個問題?下面是從結構頭一些示例代碼:不同模板之間的C++拷貝構造函數

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

模板去頭文件,當然 – user463035818

+0

!我的意思是「我將如何在類定義之外實現這個目標?」 – Myone

回答

2

您無法在.cpp文件中定義模板函數。但在頭部,類定義之外你可以

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

定義模板類的模板成員函數的語法不是很明顯。你需要有兩個模板參數列表;一個班級,一個用於功能:

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

注意模板需要在頭文件中實現,所以你不能把這個在.cpp

0

你可以做其他的構造函數模板本身:

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; 
}