2013-07-06 88 views
2

例如:如何專用模板類中的模板成員函數(已經指定)?

template<unsigned number> 
struct A 
{ 
    template<class T> 
    static void Fun() 
    {} 
}; 

template<> 
struct A<1> 
{ 
    template<class T> 
    static void Fun() 
    { 
     /* some code here. */ 
    } 
}; 

而且要專注一個< 1> ::樂()

template<> 
template<> 
void A<1>::Fun<int>() 
{ 
    /* some code here. */ 
} 

似乎並沒有工作。怎麼做?謝謝。

回答

2

類模板的顯式特化類似於普通類(它是完全實例化的,所以它不是參數類型)。因此,你不需要外template<>

// template<> <== NOT NEEDED: A<1> is just like a regular class 
template<> // <== NEEDED to explicitly specialize member function template Fun() 
void A<1>::Fun<int>() 
{ 
    /* some code here. */ 
} 

同樣,如果你的成員函數Fun不是一個函數模板,而是一個普通的成員函數,你就不需要任何template<>可言:

template<> 
struct A<1> 
{ 
    void Fun(); 
}; 

void A<1>::Fun() 
{ 
    /* some code here. */ 
} 
+0

燦爛!非常感謝! – user1899020

+0

@ user1899020:很高興幫助:) –