Pat*_*ght 1 c++ templates c++17
如果我有这样的模板:
template <typename ... TYPES>
class Visitor {
public:
//virtual void visit(...) {}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法让 C++ 为列表中的“每个”类型生成虚拟方法?
例如,从概念上讲,我想
class A;
class B;
class C;
class MyVisitor : public Visitor<A,B,C>;
Run Code Online (Sandbox Code Playgroud)
具有以下虚拟方法
virtual void visit(const A&) {}
virtual void visit(const B&) {}
virtual void visit(const C&) {}
Run Code Online (Sandbox Code Playgroud)
Visitor您可以为其中的每个类型添加一个基类模板,为所提供的类型TYPES定义一个函数,然后您将从这些基类继承。visit那看起来像
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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |