template <typename... Types> struct Packaging; template <typename T, typename... Types> struct Packaging<T, Types...> :Packaging<Types...> { // 通过using避免隐藏函数的startPacking同名方法 using Packaging<Types...>::startPacking; virtual void startPacking(const T&) = 0; }; template <typename T> struct Packaging<T> { virtual void startPacking(const T&) = 0; }; struct H264en; struct H265en; struct Encode { // 定义通用的访问者类型,可以访问H264en和H265en typedef Packaging<H264en, H265en> FilePackaging; // 会自动生成H264en和H265en的FilePackaging虚函数,如果要扩展更多访问者类型,则修改Visitor<stA, stB, stC, stD, stE> virtual void makeFile(FilePackaging&) = 0; string temp; string result; void put(string str) { temp = str; } const string get() { return result; } }; struct H264en :Encode { double val; void makeFile(Encode::FilePackaging& v) { result = "h264en+" + temp + to_string(val); v.startPacking(*this); } }; struct H265en :Encode { int val; void makeFile(Encode::FilePackaging& v) { result = "h265en+" + temp + to_string(val); v.startPacking(*this); } }; struct JpgFilePacking :Encode::FilePackaging { void startPacking(const H264en& en) // 处理H264编码后的工作 { H264en h = const_cast<H264en&>(en); cout << "JpgFilePacking>>" << h.get().c_str() << endl; } void startPacking(const H265en& en) // 处理H265编码后的工作 { H265en h = const_cast<H265en&>(en); cout << "JpgFilePacking>>" << h.get().c_str() << ":" << en.temp << endl; } }; void test() { JpgFilePacking tfp; string test = "abc"; // 原始数据 H264en a; a.val = 8.97; a.put(test); H265en b; b.val = 8; b.put(test); a.makeFile(tfp); // 编码同时打包 b.makeFile(tfp); // 编码同时打包 } int main(int, char *[]) { test(); system("pause"); return 0; }
相关推荐
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
访问者模式的小例子
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象都会收到通知并自动更新。 4. **装饰者模式(Decorator ...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学 者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等 重要的C++特性,是前一...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
本书包括Typelists,小型对象分配技术,泛化仿函数,(单件)实作技术, 智能指针,对象工厂,抽象工厂,Visitor(访问者,视察者), Multimethods等内容
本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理...
1.4.1 创建Visual C++应用程序 6 1.4.2 Visual C++ 2010菜单介绍 9 1.5 Visual C++ 2010 MFC简介 12 1.6 Visual C++ 2010 clr简介 13 1.7 Visual C++ 2010 64位编程 14 1.8 支持新的C++语言标准 14 1.8.1 支持新的...
本书作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术顾问。... 11代理模式控制对象访问 12复合模式模式中的模型 13与设计模式相处真实世界中的模式 附录A:剩下的模式 索引……
对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南;对于中高级程序员,本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。 【目录信息】 第1...
1.3 编写C++应用程序 3 1.4 学习Windows编程 4 1.4.1 学习C++ 4 1.4.2 C++标准 5 1.4.3 属性 5 1.4.4 控制台应用程序 5 1.4.5 Windows编程概念 6 1.5 集成开发环境简介 7 1.5.1 编辑器 8 1.5.2 编译器 8 ...
C++模式同样可以有参数并且可以返回值。QML支持如下类型: •bool •unsigned int, int •float, double, qreal •QString •QUrl •QColor •QDate,QTime,QDateTime •QPoint,QPointF •QSize,QSizeF •QRect,...
出版者+订阅者=观罕者模式 五分钟短剧:观察主题 定义观察者模式 松耦合的威力 设计气象站 实现气象站 使用Java内建的观察者模式 java.util.Observable的黑暗面 设计箱内的工具 习题解答 …… 3 装饰...