class BaseVisitor {
public:
virtual ~BaseVisitor() {}
};
template
class Visitor : public BaseVisitor {
public:
virtual void visit(T& /* visitable */) = 0;
};
template
class Visitable {
public:
void accept(Visitor& visitor) {
visitor.visit(static_cast(*this));
}
};
Visitable的每个子类都如下所示:
class Mesh : public Object, public Visitable {};
class Text : public Object, public Visitable {};
最后,访客看起来像这样:
class Renderer : public Visitor, public Visitor {}
到目前为止一切都很好……现在问题在于:
for(Scene::iterator it = scene.begin(); it != scene.end(); ++it) {
Object& object = static_cast
我需要以某种方式转换为Visitable以便我可以调用accept(),但显然我不知道T是什么.或者,我无法向Visitable模板添加虚拟accept(),因为我不知道它应该采用什么参数.
任何C模板大师都知道如何使这项工作?
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/shiyongcmobanshixianfangwenzhemoshi.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9 月 27, 2019 at 04:05 上午