2013-07-06 4 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. */ 
    } 
}; 

И специализироваться A < 1> :: Fun()

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: Рад, что это помогло :) –

Смежные вопросы