草庐IT

visitor-pattern

全部标签

C++ 避免 const 和非常量访问的代码重复

我有一个类应该为每个成员变量调用访问者方法。像这样:classA{inta,b,c;public:voidaccept(Visitor&visitor){visitor.visit(a);visitor.visit(b);visitor.visit(c);}};如何在没有代码重复的情况下使用相同的代码获得voidaccept()const方法?复制的明显解决方案是添加一个方法:voidaccept(Visitor&visitor)const{visitor.visit(a);visitor.visit(b);visitor.visit(c);}该方法正是我想要的意思,但我想避免代码重复

c++ - 将 Curiously Recurring Template Pattern (CRTP) 与其他类型参数一起使用

我尝试使用CuriouslyRecurringTemplatePattern(CRTP)并提供额外的类型参数:templateclassBase{Int*i;Float*f;};...classA:publicBase{};这可能是一个错误,更合适的父类(superclass)是Base--尽管这种参数顺序不匹配不是那么明显。如果我可以在typedef中使用名称参数的含义,这个错误会更容易看到:templateclassBase{typenameSubclass::Int_t*i;//error:invaliduseofincompletetype‘classA’typenameSub

Technology Strategy Patterns 学习笔记8- Communicating the Strategy-Decks(ppt模板)

1GhostDeck/BlankDeck1.1It’saspecialwayofmakinganinitialdeckthathasacertainpurpose1.2you’remakingsureyouhavefiguredoutwhatalltheimportantshotsarebeforeincurringthemajorexpenseofshootingthem1.3需要从技术、战略、产品相关角度评估整体1.4编写步骤先有整体轮廓/outline先只写headline,makesuretheystillmakesense不断review和检查headline:使用DramaticS

c++ - 具有多个参数的 boost::static_visitor

typedefboost::variantType;classAppend:publicboost::static_visitor{public:voidoperator()(int){}voidoperator()(double){}};Typetype(1.2);Visitorvisitor;boost::apply_visitor(visitor,type);是否可以更改访问者,使其接收如下额外数据:classAppend:publicboost::static_visitor{public:voidoperator()(int,conststd::string&){}voido

c++ - 非常简单的应用程序失败,来自 Eclipse 的 "multiple target patterns"

因为我更习惯使用Eclipse,所以我想尝试从VisualStudio转换我的项目。昨天我尝试了一个非常简单的小测试。无论我尝试什么,make都会因“多目标模式”而失败。(这类似于thisunansweredquestion。)我有三个文件:应用程序.cpp:usingnamespacestd;#include"Window.h"intmain(){Window*win=newWindow();delete&win;return0;}窗口.h:#ifndefWINDOW_H_#defineWINDOW_H_classWindow{public:Window();~Window();};

c++ - C++ 中是否可以使用无状态访问者模式?

我试图将以下Haskell代码翻译成C++:dataListt=Nil|Const(Listt)将代数数据类型直接转换为无状态访问者模式会产生以下Java代码interfaceList{Raccept(ListVisitorv);}interfaceListVisitor{RvisitNil();RvisitCons(Thead,Listtail);}classNilimplementsList{@OverridepublicRaccept(ListVisitorv){returnv.visitNil();}}classConsimplementsList{publicfinalThe

设计模式——享元模式(Flyweight Pattern)+ Spring相关源码

文章目录一、享元模式定义二、例子2.1菜鸟教程例子2.1.1定义被缓存对象2.1.2定义ShapeFactory2.2JDK源码——Integer2.3JDK源码——DriverManager2.4Spring源码——HandlerMethodArgumentResolverComposite除此之外BeanFactory获取bean其实也是一种享元模式的应用。三、其他设计模式一、享元模式定义类型:结构型模式介绍:使用容器(数组、集合等…)缓存常用对象。它也是池技术的重要实现方式,正如常量池、数据库连接池、缓冲池等都是享元模式的应用。目的:主要用于减少频繁创建对象带来的开销。二、例子2.1菜鸟

设计模式 -- 策略模式(Strategy Pattern)

策略模式:一种行为型模式,这些设计模式特别关注对象之间的通信。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。介绍意图:定义一系列的算法、策略或行为,把它们封装成一个一个的策略类,主要解决问题:在有多种相似算法、策略或行为的情况下,使用if...else所带来的复杂和难以维护。关键代码:实现同一个接口优点:1、算法可以自由切换。2、避免使用多重条件判断。3、扩展性良好。缺点:1、策略类会增多。2、所有策略类都需要对外暴露(这有点违背设计模式六大原则的迪米特法则)。举个例子:绘制三角形、圆形、矩形图案(And

redis - Redis "Pattern: Reliable queue"的代码实现

出色的redis文档列出了一个Reliablequeuepattern作为RPOPLPUSH函数的一个很好的候选者/示例。我将“可靠队列”理解为具有像AmazonSQSFIFOexactlyoncepattern这样的交付模式的东西.具体来说,您有一些N个进程向一个队列中提供数据,而一些M个工作进程从该队列中工作。这实际上看起来像什么实现?我会冒险做这样的事情:使供给进程填充工作队列。#feeder1importredisimportdatetimeimporttimer=redis.Redis(host='localhost',port=6379,db=0)whileTrue:now

design-patterns - Redis中持久队列的 worker 管理

使用LPUSH和BRPOPLPUSH(http://redis.io/commands/rpoplpush)在Redis中实现持久队列是一种众所周知的模式。然而,为了扩大规模,该设计需要满足主任务队列中BRPOPLPUSH的多个工作人员/消费者。所以规范似乎是对于每个工作人员都有一个单独的processing_queue记录特定工作人员正在处理的任务,这样工作人员可以跟踪剩下要做的事情以防万一它在处理过程中退出。关于这个processing_queue我有两个问题:worker的processing_queue中任何时候都最多一个项/任务的推理是否正确?我假设工作人员首先检查其自己的p