小编use*_*018的帖子

C++ 中的通用访问者基类模板 - 重载问题

我认为编写通用访问者基类模板将是一个简单的练习。目标是能够写

\n\n
typedef visitor<some_base, some_derived1, some_derived2> my_visitor;\n
Run Code Online (Sandbox Code Playgroud)\n\n

...然后让 my_visitor 成为功能上等效于的类型

\n\n
struct my_visitor {\n    virtual void visit(some_base&) {}\n    virtual void visit(some_derived1&) {}\n    virtual void visit(some_derived2&) {}\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以用该类型层次结构的实际有用的派生访问者类继承它,根据需要重写不同的访问()版本。我希望它适用于具有任何继承关系的任意数量的类型,并且我不想使用任何使用 type_info 比较重新实现虚拟函数的技巧。这就是我想出的:

\n\n
#include <cstdlib>\n#include <iostream>\n#include <vector>\n\n\n/** This is the generic part that would go in a visitor.hpp header. */\ntemplate <typename T> struct visitor_base {\n    virtual void visit(T&) {};\n};\n\ntemplate <typename... T> struct visitor : visitor_base<T>... {};\n\n\n/** This is the part that is specific to a certain type hierarchy. */\nstruct base;\nstruct derived1;\nstruct …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates visitor-pattern c++11

4
推荐指数
1
解决办法
1548
查看次数

标签 统计

c++ ×1

c++11 ×1

inheritance ×1

templates ×1

visitor-pattern ×1