2011-05-17 150 views
3

可有人請告訴我如何做以下僞代碼GCC4兼容?我不知道它是如何工作的下MSVC ...太少模板參數列表問題

typedef int TypeA; 
typedef float TypeB; 

class MyClass 
{ 
// No base template function, only partially specialized functions... 
    inline TypeA myFunction<TypeA>(int a, int b) {} //error: Too few template-parameter-lists 
    template<> inline TypeB myFunction<TypeB>(int a, int b) {} 
}; 

回答

5

編碼該構造的正確方法是:

typedef int TypeA; 
typedef float TypeB; 
class MyClass 
{ 
    template <typename T> 
    T myFunction(int a, int b); 
}; 
template <> 
inline TypeA MyClass::myFunction<TypeA>(int a, int b) {} 
template <> 
inline TypeB MyClass::myFunction<TypeB>(int a, int b) {} 

注意,模板成員函數將被聲明的類聲明,但專業化必須在名稱空間級別定義以外的

+0

非常感謝!我害怕我必須實現基本模板功能... – Ryan 2011-05-17 11:55:02

+0

@Ryan:只要從未使用過,您不需要實現它。如果某些代碼嘗試使用除double或int之外的模板參數調用該函數,它將進行編譯(該聲明存在),但它將無法鏈接(對於非專用模板沒有定義)。此外,由於只有兩種實例化類型,您可以將特化移至單個翻譯單元並手動實例化它們(不要忘記向該函數添加註釋,以便其他人知道您只能將該模板與兩種類型!) – 2011-05-17 12:59:46

+0

感謝澄清,大衛!我很抱歉問這麼多,但是你能否告訴我,在模板功能的情況下如何解決這類問題?如果我定義一個全局命名空間的模板函數和幾個專門的功能,我得到了專業化的......經過實例化「的錯誤... – Ryan 2011-05-17 13:13:45