哪种算法需要“访问者”(boost 库中的术语)?

Posted

技术标签:

【中文标题】哪种算法需要“访问者”(boost 库中的术语)?【英文标题】:Which algorithm needs "visitor" (term in boost library)? 【发布时间】:2018-12-25 06:20:11 【问题描述】:

我正在学习 C++ 中的 boost 库。当我进入 bfs 部分时,指南告诉我可以输入一个访问者类(可选),它具有 vis.initialize_vertex(v, g)vis.examine_vertex(u, g) 之类的功能。

我认为访问者只能用于您有时希望从中获得一些信息的算法,这并不常见。而且我只在 dfs 和 bfs 中看到过访问者(在 boost 中)。所以想问问还有没有其他算法需要访问者?

我的意思是“访问者”是当你应用一个算法时,你可能需要一些额外的信息或做一些额外的事情(例如在 bfs 期间打印所有元素),而不是变体中的 apply_visitor。我想问的是,是否还有其他算法需要我们做这些额外的事情?

【问题讨论】:

参见 boost::variant。您可以通过 boost::apply_visitor() 访问来使用其中的值 我已经改变了问题。我认为variant中的访问者和bfs中的访问者不是一回事。 【参考方案1】:

访客主要有2种,

主要是在“迭代器”上应用函数的一种:

树遍历(前/后顺序遍历,...)。 图遍历(dfs, bfs, ...)

另一个用于调度一个元素:

std::variant 双重调度 “替换”虚拟方法(访问者模式)。

【讨论】:

以上是关于哪种算法需要“访问者”(boost 库中的术语)?的主要内容,如果未能解决你的问题,请参考以下文章

为递归变体编写 boost::variant 访问者

模拟实现c++标准库和boost库中的智能指针

如何使用 boost 库中的 integer_sort?

这是 boost 库中的错误吗

C++11实现的Boost库中的Any类

*.pyd 库中的 C++ Boost Python 方法不起作用