使用可变参数模板和CRTP实现访问者模式
Visitor模式的一大缺点就是依赖问题,在定义Visitor接口的时候,就必须要知道所有的子类类型。在一些编译链接型语言如C++中,Visitor类和子类就会出现相互依赖的情况,当然,通过前向声明可以解决这个问题。另外一个问题就是在不同的子类中有很多“制式”代码。比如所有的子类必须实现基类中的Accept(Visitor&)方法,并且方法的实现都是一模一样的,都是调用该参数的Visitor方法并传入指向对象本身的引用。幸好在C++ 11中引入了可变参数模板,使用可变参数模板以及CRTP技术,可以极大简化Visitor模式中的一些实现方面的问题。在这一过程中顺便学习和了解Moden C++的一些强大的功能,这些功能是如此的特别以至于它跟C#有很大的不同。 …