[英]How can I implement the visitor patter with return type in C++
我想为我的 class 之一实现访问者模式,而不必依赖将实现访问它们的接口的类型。
我的解决方案是这样的:
class model::VisitableNode {
public:
template<class T>
virtual T accept(NodeVisitor<T>);
}
但是 C++ 说它不支持模板+虚拟方法
我的应用程序中的节点将只有一个实现,但如果我不使用模板返回类型,我的 model class 将取决于我用来为我的应用程序创建图形的工具包。
如果访问者需要返回值,将返回值存储在访问者本身中是正常的。 因此:
NodeVisitor<double> dv;
node->accept(dv);
double result = dv.result();
如果您不喜欢样板,可以将其包装在非虚拟成员中:
class model::VisitableNode {
public:
template<class T>
/* non-virtual */ T accept(NodeVisitor<T>& v) {
do_accept(v);
return v.result;
}
virtual void do_accept(NodeVisitorBase& v) = 0;
}
为什么不模板化 class 本身?
template<class T>
class model::VisitableNode<T> {
public:
virtual T accept(NodeVisitor<T>);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.