模板类中的重载模板方法

时间:2015-05-29 22:24:10

标签: c++ templates

我正在尝试重载模板类中的模板方法。但它只有在我在类定义中完成时才会起作用。

如何在类定义之外获得外部实现?

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 );
}

1 个答案:

答案 0 :(得分: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<>的版本中,它们是特化,而不是重载。重载,而不是专业化,可能就是你想要的。