2015-11-27 2 views
5

Я пытаюсь специализировать функцию в специализации шаблона класса, но не могу понять правильный синтаксис:Явная специализация шаблона функции для полностью специализированного шаблона класса

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> template<> 
void Foo<int>::fn<char>() {} // error: too many template-parameter-lists 

Здесь я m пытается специализировать fn для char, который находится внутри Foo специализируется на int. Но компилятору не нравится то, что я пишу. Какой должен быть правильный синтаксис?

ответ

6

Вам не нужно говорить, что вы специализируетесь дважды.

Вы только специализирующийся один шаблон функции здесь

template<> void Foo<int>::fn<char>() {} 

Live On Coliru

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> void Foo<int>::fn<char>() {} 

int main() { 
    Foo<int> f; 
    f.fn<char>(); 
} 
+1

Удивительно, но сообщение об ошибке компилятора был на месте. –

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