我正在尝试重载模板类中的模板方法。但它只有在我在类定义中完成时才会起作用。
如何在类定义之外获得外部实现?
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 :(得分: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<>
的版本中,它们是特化,而不是重载。重载,而不是专业化,可能就是你想要的。