`

C++11应用:访问者模式

 
阅读更多
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++Qt设计模式(第2版) 中文 高清 PDF

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...

    访问者模式例子

    访问者模式的小例子

    C++ Qt设计模式源代码

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...

    c++设计模式全系列+应用场景+实例说明

    3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象都会收到通知并自动更新。 4. **装饰者模式(Decorator ...

    C++ Qt设计模式

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...

    C++ Qt设计模式(第2版)

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...

    C++ Qt设计模式 第2版(中文版)

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学 者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等 重要的C++特性,是前一...

    C++ Qt设计模式 第2版 中文版 清晰 带完整书签

    全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...

    C++ 设计新思维:范型编程与设计模式之应用

    本书包括Typelists,小型对象分配技术,泛化仿函数,(单件)实作技术, 智能指针,对象工厂,抽象工厂,Visitor(访问者,视察者), Multimethods等内容

    VISUAL C++MFC编程实例

    本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理...

    Visual C++2010开发权威指南(共三部分).part1.rar

    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 支持新的...

    Head First(Design Patterns) 设计模式英文原版

    本书作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术顾问。... 11代理模式控制对象访问  12复合模式模式中的模型  13与设计模式相处真实世界中的模式  附录A:剩下的模式 索引……

    C++ Primer第四版【中文高清扫描版】.pdf

    对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南;对于中高级程序员,本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。 【目录信息】 第1...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    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

    C++模式同样可以有参数并且可以返回值。QML支持如下类型: •bool •unsigned int, int •float, double, qreal •QString •QUrl •QColor •QDate,QTime,QDateTime •QPoint,QPointF •QSize,QSizeF •QRect,...

    Head.First设计模式_PDF.part1

    出版者+订阅者=观罕者模式 五分钟短剧:观察主题 定义观察者模式 松耦合的威力 设计气象站 实现气象站 使用Java内建的观察者模式 java.util.Observable的黑暗面 设计箱内的工具 习题解答 …… 3 装饰...

Global site tag (gtag.js) - Google Analytics