2012-08-09 58 views
2

我有一個模板類,我想要一個成員函數用任何模板參數接受該類的對象。因此,它應該可以運行類似:與模板參數不同的數據類型的模板對象

main(){ 
    A<double> object1; 
    A<double> object2; 
    A<int> object3; 

    object1.f(object2); 
    object1.f(object3); 
} 

這是我迄今爲止,但它似乎並沒有工作,因爲它假設參數必須是完全相同的類型調用對象的:

template<typename T> 
class A 
{ 
    void f(A<T> &a); 
} 

任何想法?提前致謝。

回答

3

f本身需要一個模板,有自己的模板參數:

template<typename T> 
class A 
{ 
    template <typename U> 
    void f(A<U>& a); 
} 

當你調用object1.f(object2)fU = double被實例化;當您撥打object1.f(object3)時,f將用U = int實例化。

在兩種情況下T = double因爲object1A<double>類型的,並且是T類模板A的模板參數。

1

你需要一個成員函數模板:

template <typename T> 
class A 
{ 
    template <typename U> 
    void f(A<U>& a) 
    { 
     //... 
    } 
}; 
1

,但它似乎沒有工作,因爲它假設參數必須是完全相同的類型調用對象的:

當然重要,因爲這是你教它做的事情:

template<typename T> 
class A 
{ 
    void f(A<T> &a); 
} 

也許你想製作f模板本身:

template<typename T> 
class A 
{ 
    template <typename T1> //<--- different type 
    void f(A<T1> &a); 
}