Qt元对象系统和模板机制的冲突

Qt元对象系统是对为了Qt对象类型和信号与槽机制引进的,Qt的工具包中有一个元对象编译器,它是为支持Qt元对象系统而产生一些额外C++代码,这些编码会和源码一起被标准的C++编译器编译,因为Qt的这一套标准是不支持的,但是可以实现,说白了就是在标准编译器编译前的一个预处理。

C++的模板机制是代码重用,其实现在已经不只是这些。如果有兴趣可以了解一些C++的最新的研究方面,比如模板元编程,繁殖性编程等。标准编译器遇到模板会进行类型的替换。但是Qt的元对象系统需要明确知道类型。如果看过生成的额外的代码就会发现,它做些一些薄记工作,类型转换,这些都是需要明确的类型,而模板必须由标准的编译器替换,而元对象编译器工作在便准编译器之前,所以就是冲突的地方。想解决这个冲突,必须元对象编译器先完成类型的替换在生成额外的代码才行。

我在前面讲过我提前完成了标准编译器完成的事,使用typedef指定了T的类型,虽然可以通过改变指定的类型来实现代码的重用,可是却不能解决一个基本的问题,怎么样生成在一个程序中不同类型的类。比如上面我虽然可以将student改成person,可是我不能同时使用student和person。

在此还希望一些在模板方面的大神给予小弟一些帮助

你可能感兴趣的:(Qt元对象系统和模板机制的冲突)