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++中,访问者模式通常通过实现双重多态来实现:对象结构中的类具有接受访问者的接口,而访问者类则包含针对不同对象的访问方法。下面我们将详细探讨访问者模式的组成部分、实现方式以及如何在实际开发中应用。 1...
观察者模式则适用于一个对象变化需要通知其他多个对象的场景。通过将这些模式应用到C++编程实践中,程序员能够构建更加健壮、易于维护和扩展的软件系统。 书中对于泛型编程和设计模式的结合使用,展现出了C++的高级...
在本项目“Qt C++11 生产者消费者模式类”中,我们看到利用Qt框架和C++11的新特性,如`std::mutex`和`std::condition_variable`,来实现这一模式。下面将详细解释这些概念以及它们在项目中的应用。 首先,理解生产...
3. 行为型模式:如策略模式(Strategy)、观察者模式(Observer)、访问者模式(Visitor)等,关注对象之间的交互和职责分配。 三、多线程编程 在《C++面向对象多线程编程.pdf》中,可能涵盖了C++11引入的多线程...
**访问者模式(Visitor)详解** 访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时...
在“访问者模式”的例子中,我们将深入理解其核心概念和应用场景。 访问者模式的核心组件包括: 1. **元素(Element)接口/抽象类**:这是对象结构中的基本组成单元,定义了一个接受访问者的接口。 2. **具体元素...
在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等工具。 生产者消费者模式的基本思想是将数据的生产与消费分离,生产者负责创建数据,而消费者负责处理这些...
在C++编程中,访问者模式的应用可以帮助开发者在保持原有类结构完整性的前提下,扩展类的功能,实现代码的解耦。 访问者模式的核心组成部分包括: 1. **访问者(Visitor)**:这是一个抽象类,为每个具体元素声明了...
总结来说,这个压缩包提供的"访问者模式"实现是一个C++项目,利用了Qt库的跨平台特性,展示了如何在实际场景中应用访问者模式。它可以帮助开发者更灵活地处理和操作对象,同时保持代码的整洁和可扩展性。
从给定的文件信息来看,该文档主要涵盖了GoF(Gang of Four)提出的23种设计模式的详细解析,并附带了C++语言的实现源码。设计模式是在软件工程领域内,针对常见问题的一套经过验证的解决方案,它们为解决特定类型的...
本文旨在深入探讨这些设计模式,并结合C++语言的具体实现来进一步理解这些模式的实际应用场景。 #### 0.1 设计模式解析(总序) 设计模式不仅是一套编程技巧的集合,更是一种思维方式的体现。它们帮助开发者更好地...
6. **访问者模式(Visitor Pattern)**:访问者模式允许在不修改类结构的情况下,为类添加新的操作。20.访问者模式Visitor展示了如何通过访问者类来访问并操作一组相关或相互依赖的对象,而无需改变这些对象本身。 ...
17. **访问者模式**:访问者模式表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 18. **状态模式**:状态模式允许对象在其内部状态改变时改变其行为,...
行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...
总的来说,`C++设计模式代码资源24_Vistor_访问器.zip`提供了一个学习和实践C++访问者模式的实例,通过`Visitor1.cpp`和`Visitor2.cpp`的代码,我们可以深入理解如何在实际项目中运用这一模式,提高代码的灵活性和可...
4. **Builder模式**:建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它通过步骤化的构建过程,使创建过程更加灵活。 5. **Prototype模式**:原型模式通过克隆已有对象来创建新...
3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象都会收到通知并自动更新。 4. **装饰者模式(Decorator ...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
- 访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 设计模式不仅提供了标准的解决方案,还有助于代码的可读性和可维护性。通过理解并...