聊到 C++ 的访问者模式,很多人的第一反应是“这是 Java 里那套重载+双分派的东西,C++ 里写起来又绕又繁琐”。实际上从 C++17 开始,这个局面完全变了:标准库把 std::variant 和 std::visit 带进来后,访问者模式从一个需要精心设计类层次的结构,变成了一段可以塞在函数里的 lambda 集合。甚至可以说,现代 C++ 里你不需要先理解“访问者”这个名字,只要会写 std::visit,就已经在用访问者模式的变体了。
这篇文章想做的,是把 C++ 中访问者模式的各种“变体”放到同一张桌子上做一次彻底对比:经典 GoF 继承式访问者、std::variant + std::visit 组合、overloaded 技巧、if constexpr 静态分发
