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

Mir*_*pas 2 c++ inheritance templates

有以下代码:

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

virtual void print(int x) = 0;
virtual void print(float x) = 0;
Run Code Online (Sandbox Code Playgroud)

Derived课堂上的形式:

template<typename T>
void print(T x)
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 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;
    }
};
Run Code Online (Sandbox Code Playgroud)

如果你发现它太冗长了,并且你有很多这样的prints,你也可以将它宏:

#define PRINT_FWD(typ) void print(typ x) override { printTempl(x); }
Run Code Online (Sandbox Code Playgroud)