我有一个模板化的类,其方法需要针对特定模板类型的不同实现。我如何完成它?
答案 0 :(得分:4)
您必须为此特定类型创建partial (or full) specialization。
答案 1 :(得分:3)
您可以专门针对该类型的方法。 E.g。
template<typename T>
struct TemplatedClass
{
std::string methodA () {return "T methodA";}
std::string methodB () {return "T methodB";}
std::string methodC () {return "T methodC";}
};
// Specialise methodA for int.
template<>
std::string TemplatedClass<int>::methodA ()
{
return "int methodA";
}
答案 2 :(得分:2)
Timo的答案只允许你将整个类专门化,这意味着编译器不会自动将成员函数从基类型复制到专用类型。
如果你想在类中专门化一个特定的方法而不重新创建其他所有方法,那就有点复杂了。您可以通过将size-zero模板化结构作为参数传递来实现,如下所示:
template<typename T> struct TypeHolder { };
template<typename T> class TemplateBase {
public:
void methodInterface() {
methodImplementation(TypeHolder<T>);
}
void anotherMethod() {
// implementation for a function that does not
// need to be specialized
}
private:
void methodImplementation(TypeHolder<int>) {
// implementation for int type
}
void methodImplementation(TypeHolder<float>) {
// implementation for float type
}
};
编译器会将相应的methodImplementation
内联到methodInterface
中,并且除了size-zero结构,所以它就像你只对成员函数进行了专门化一样。 / p>