visitor-pattern

    2热度

    1回答

    我正在使用访问者模式的中型C++框架。 执行此框架的程序的valgrind测试报告了大量内存泄漏,可以追踪到其中一个访问者,即copyCreator。 template<typename copyNodeType> struct copyCreator { copyCreator {} copyCreator(node * firstVisit) { firstV

    1热度

    1回答

    我正在C++中实现Visitor类,它为分析树生成XML输出。 当我在Windows上使用Clion进行编译时,代码会编译,但是当它运行后,它会输出预期会崩溃的代码。错误代码是这个 进程退出代码为-1073741819(0000005) 完成当我尝试用gcc(不克利翁)编译我得到错误信息 未定义参考'PrintXMLVisitor的vtable'。 我的代码如下。我已蒸馏下来到最少的产生错误 AS

    1热度

    1回答

    早些时候我问了这个question约std::variant。考虑到变体所具有的类型均可通过std::cout进行打印,是否有实现访问者的简单方法?例如,一路下来,你有几个lambda覆盖每种类型,但都做同样的事情(除了std::string):std::cout << arg << ' ';。有没有办法不重复我的自我? std::visit(overloaded { [](int

    0热度

    1回答

    我正在读implementing_the_visitor_pattern_without_recursion从Python的食谱,第三版 The implementation with additional Visit Class修复缺陷the one without it,因为它要求。 “这个配方的一个潜在危险是关于产生节点和非节点值的区别 。在实现中,所有节点 自动遍历。这意味着您不能使用 节

    0热度

    1回答

    我有一个不同的Line类的继承树,从抽象Line-classes开始。我希望能够将每一行与每一行相交,有时候,我也不知道任何运行时类型,例如,我打电话Line.Intersect(Line)(所以我需要双重调度)。这将总是调用被覆盖的最为抽象的过载 - 方法,例如, Circle.Intersect(Line)而不是Circle.Intersect(actualType)。下面是一些示例代码: c

    1热度

    2回答

    在C++中对访问者模式进行实验后,就实现派生接口而言,我遇到了一个愚蠢的问题。我怀疑我不知道如何正确地提出问题,因为我还没有在其他地方找到解决方案。 我有以下基本结构: struct Visitor { virtual void visit(const Resources) = 0; virtual void visit(const Population) = 0; };

    1热度

    1回答

    我正在尝试使用模板,访问者模式和CRTPs的帮助编写邮件系统。我理解这些概念,但仍然处于这种情况下,我必须回顾一种“迷失”类型。我有一个Base班,我想找到一个Derived<T>。这是推断“两种”的类型,即使它被认为是一种类型,任何东西都可以是T。 我试图利用第二个访客模式,这看起来很沉重而且很疯狂,但我没有找到任何工作解决方案。即使它与游戏有关,它只是一个例子,它可以应用于其他程序,我想,我不

    -1热度

    1回答

    我正在探索Visitor模式,下面是代码。请注意,我已经知道如何解决这个问题了 - 使用虚拟方法并用各种过载扩展Visitor界面。我想更好地理解c#中的类型和重载分辨率。 在测试方法中,当调用Accept方法时,它始终使用参数类型“Element”而不是BinaryOperator调用Visit方法。根据关于SO的其他类似问题的答案,这是因为在编译时解析了超载方法&对象类型。 链接: why-i

    1热度

    1回答

    目前我正在使用Visitor Pattern的项目。虽然这种模式的工作,我发现自己写这样的评语: * @param VisitorInterface $visitor The visitor to visit. Visitor模式包括以下接口: VisitorInterface { public function visit($object); } VisitableInterfa

    0热度

    1回答

    我使用访问者模式来处理很多不同的AST问题,结果证明它工作得很好。例如,我正在使用它来检查静态类型。这在查找确切类型时效果很好,但它不适用于派生类。即如果我们有从Base继承的Derived,询问Derived对象是否为Base失败。 考虑下面的C++代码: #include <iostream> #include <functional> #include <memory> using