每种类型的模板虚拟方法

发布于 2025-01-23 09:01:08 字数 440 浏览 0 评论 0原文

如果我有一个模板:

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&) {}

If I have a template as such:

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

Is there a way I can have C++ generate virtual methods "for each" type in the list?

For example, conceptually, I would like

class A;
class B;
class C;

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

To have the following virtual methods

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美人如玉 2025-01-30 09:01:08

您可以为访问者添加一个基类模板类型的每种类型,该模板定义了访问提供的类型的函数,然后您将继承从这些基础课程。看起来像

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
};

You could add a base class template for Visitor and for each type in TYPES that defines a visit function for the type provided and then you would inherit from those base classes. That would look like

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
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文