今天折腾这个“implement_dynamic”,一开始我压根不知道这是啥玩意儿。看到这名字,我还以为是哪个新出的库或者框架,心想这年头新东西出的真快,又得学。
结果,搜一圈,发现这玩意儿好像不是个单独的东西,更像是个……怎么说,一种“零件”?在 C++ 里面用的,而且经常跟什么 MFC ,动态创建,运行时类型信息这些词一起出现。这些词我看着都头大。
不过为搞明白,我还是硬着头皮继续查。看到有人说,这东西跟DECLARE_DYNAMIC
是一对儿,一个声明,一个实现。这更让我懵,这都啥跟啥?
然后,我又看到有人说,这东西能让程序在运行的时候,知道某个对象是啥类型的。这有点像……像算命?程序能自己“算”出对象的类型?听起来挺神的。
我试着去找一些例子,想看看这东西到底怎么用。结果,找到的代码都长得奇奇怪怪的,各种宏定义,各种大写字母,看得我眼花缭乱。什么IMPLEMENT_DYNAMIC(MyClass, CObject)
,这都是啥?
- 有人说,要用这东西,得先有个类,还得从某个基类继承。
- 然后,在类定义的地方,要写上
DECLARE_DYNAMIC
。 - 在实现文件里,要写上
IMPLEMENT_DYNAMIC
。
这么一套组合拳下来,才能实现所谓的“动态”功能。具体有啥用?有人说是为方便对象的创建,不用在代码里写死,可以在运行的时候根据需要创建不同的对象。这……有点像工厂模式?
我还看到有人提到 Zblog,说它也用到类似的技术,方便开发者进行二次开发。这倒是让我有点兴趣,毕竟 Zblog 我还算熟悉。不过具体是怎么实现的,我还是没搞懂。
总结一下,今天这番折腾,虽然没完全搞明白“implement_dynamic”的来龙去脉,但也算有点收获:
- 这东西不是一个独立的库或框架,而是 C++ 里面的一种机制。
- 它跟“动态创建”和“运行时类型信息”有关。
- 要用它,得写一些看起来很奇怪的宏定义。
- 这东西好像能让程序更灵活,但具体怎么用,我还得再研究研究。
今天这趟“implement_dynamic”之旅,算是开个头。下次再遇到这玩意儿,至少不会一脸懵逼。不过要真正掌握它,估计还得花不少功夫。