2015-05-29 3 views
1

Я пытаюсь перегрузить метод шаблона в классе шаблона. Но это будет работать, только если я сделаю это внутри определения класса.Метод шаблона перегрузки в классе шаблона

Как получить внешнюю реализацию за пределами определения класса?

template<typename B> 
class ClassA { 
public: 
    template<typename T> 
    void foo(T a); 

    template<> 
    void foo(std::string a) { A = 4; } 

    template<> 
    void foo(float a); 

    B A; 
}; 

template<typename B> 
template<typename T> 
void ClassA<B>::foo(T a) { A = a; } 

template<typename B> 
template<> 
void ClassA<B>::foo<float>(float a) { A = a; } 
// Compiler error: unable to match function definition to an existing declaration 

void foo() { 
    ClassA<int> a; 
    a.foo(1); 
    a.foo<std::string>("kat"); 
    a.foo<float>(4.5f); 
} 

ответ

0

Поскольку перегрузки не имеют параметров шаблона, они больше не являются шаблонами.

template<typename B> 
class ClassA { 
public: 
    template<typename T> 
    void foo(T a); 

    void foo(std::string a) { A = 4; } 

    void foo(float a); 

    B A; 
}; 

В версии с template<>, они специализаций, не перегружает. Перегрузка, а не специализация, вероятно, вы хотите.

+0

Не знаю, почему я этого не видел. Thaks. – user2099460

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