每种类型的模板虚方法

Template virtual method for each type

如果我有这样的模板:

template <typename ... TYPES>
class Visitor {
public:
    //virtual void visit(...) {}
};

有没有办法让 C++ 为列表中的“每个”类型生成虚拟方法?

例如,从概念上讲,我想

class A;
class B;
class C;

class MyVisitor : public Visitor<A,B,C>;

要有以下虚方法

virtual void visit(const A&) {}
virtual void visit(const B&) {}
virtual void visit(const C&) {}

您可以为 VisitorTYPES 中的每个类型添加一个基础 class 模板,为所提供的类型定义一个 visit 函数,然后您将继承来自那些基地 classes。看起来像

template <typename T>
class VisitorBase
{
public:
    virtual void visit(const T&) { /* some code */ }
};

template <typename ... TYPES>
class Visitor : public VisitorBase<TYPES>... 
{
public:
    using VisitorBase<TYPES>::visit...; // import all visit functions into here
};