今天搞下“运行时类型识别”这玩意,简单来说就是IMPLEMENT_DYNAMIC这个宏。这东西在MFC里面还挺常见的,所以我就想弄明白它到底是怎么回事。
我先是找些资料看看,发现这东西主要是为支持“动态创建”这个功能的。啥意思?就是你可以在程序运行的时候,根据需要创建某个类的对象,而不是在写代码的时候就定死。
然后我就去看它的定义,发现它是个宏,展开后会帮你做一些事情,具体是啥咱先不管,反正就是能实现一些功能。
具体怎么用?
你得有个类,比方说叫CMyClass
,然后你得在类的声明里面加上DECLARE_DYNAMIC(CMyClass)
。这一步是告诉大家:“我这个类支持运行时类型识别!”
光说不行,你还得在实现文件(.cpp)里面加上IMPLEMENT_DYNAMIC(CMyClass, CObject)
。这一步是真正让这个类具备运行时类型识别的能力。这里要注意,CObject
是CMyClass
的基类,你得根据你自己的类来改。
- 在头文件里用
DECLARE_DYNAMIC
声明一下。 - 在.cpp文件里用
IMPLEMENT_DYNAMIC
实现一下。
我照着做,建个类,加这两行代码,编译运行,好像也没啥特别的。
然后我又去翻翻资料,发现这东西跟typeid
和dynamic_cast
这两个运算符有点关系。这两个运算符也是用来做运行时类型识别的,不过我这回没怎么用它们,下次有机会再试试。
我还看到有人说,如果编译的时候遇到跟IMPLEMENT_DYNAMIC
有关的问题,可能是哪里写错,要仔细检查一下。
这回实践就是把IMPLEMENT_DYNAMIC
这个宏用一下,解它的基本作用和用法。感觉这东西还是挺有用的,以后写代码的时候可能会用到。
虽然没完全搞透彻它具体是怎么实现的,但起码知道它是干啥的,也算有点收获!