虚函数在派生类中实现为模板

时间:2015-06-18 19:16:46

标签: c++ templates inheritance

拥有以下代码:

struct Base
{
    virtual void print(int x) = 0;
    virtual void print(float x) = 0;
};

struct Derived : public Base
{
    template<typename T>
    void print(T x)
    {
        std::cout<<x<<std::endl;
    }
};

是否有可能做一些C ++黑魔法(对这些类型的显式实例化,一些聪明的using等)来识别实现:

virtual void print(int x) = 0;
virtual void print(float x) = 0;

Derived课程中的形式:

template<typename T>
void print(T x)

1 个答案:

答案 0 :(得分:7)

不,没有。

您可以做的是转发到本地模板实施:

struct Derived : public Base
{
    void print(int x) override { printTempl(x); }
    void print(float x) override { printTempl(x); }

    template <typename T>
    void printTempl(T x)
    {
        std::cout << x << std::endl;
    }
};

如果您发现过于冗长,并且您有许多此类print,则还可以将其设为宏:

#define PRINT_FWD(typ) void print(typ x) override { printTempl(x); }