我已经开发了一段时间了。这些野兽不时出现在MFC, wxWidgets代码中,但我找不到关于它们究竟做什么的任何信息。
据我所知,是在dynamic_cast被集成到核心c++之前出现的。其目的是允许动态创建对象和运行时动态强制转换。
但这是我找到的所有信息的终点。
我遇到了一些示例代码,在DLL中使用DECLARE_DYNAMIC_CLASS和IMPLEMENT_DYNAMIC_CLASS,这是用于导出类的。这个结构让我很困惑。
为什么要这样做?这是一个基于插件的方法,在那里你调用LoadLibrary,然后调用createddynamicclass来获得一个可以被转换为所需类型的指针?
DECLARE/IMPLEMENT_DYNAMIC在DLL边界上工作吗?由于连类对DLLEXPORT都不是那么安全,这里我们除了有一个自定义的RTTI表之外还有一些现有的问题。
是否有可能从另一个DLL的DYNAMIC_CLASS派生我的类,它将如何工作?
谁能告诉我这些东西是干什么用的,或者我在哪里可以找到一个话题超过两句话?
这些东西将额外的类型信息附加到您的类中,从而允许以与运行时无关的方式进行RTTI,允许使用工厂来创建您的类以及许多其他东西。您可以在COM、QMetaObject等中找到类似的方法
您看过DECLARE/IMPLEMENT_DYNAMIC的定义吗?
在微软的世界里,所有的大写字母通常表示一个宏,所以你可以只查找定义,并尝试从那里找出它在做什么。如果你在Visual Studio中,你可以点击一个键来跳转到定义-看看它说什么,然后查找并尝试从那里开始工作。