每种类型的模板虚方法
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&) {}
您可以为 Visitor
和 TYPES
中的每个类型添加一个基础 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
};
如果我有这样的模板:
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&) {}
您可以为 Visitor
和 TYPES
中的每个类型添加一个基础 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
};