针对特定类模板类型的模板化类方法的不同实现

时间:2009-11-15 10:29:34

标签: c++ templates

我有一个模板化的类,其方法需要针对特定​​模板类型的不同实现。我如何完成它?

3 个答案:

答案 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>