DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)

一、问题

看源码,发现这两组宏的实现是有细微差别的,需要配合使用

二、原理

这两组宏的作用类似,但有一些细微的区别:

  1. DECLARE_DYNCREATEIMPLEMENT_DYNCREATE

    • DECLARE_DYNCREATE 用于在类的声明中启用支持对象的动态创建和RTTI。
    • IMPLEMENT_DYNCREATE 用于在源文件中实现这个动态创建和RTTI支持。
    • 这对于在运行时创建对象和检查对象类型非常有用,例如在文档/视图架构中。
  2. DECLARE_DYNAMICIMPLEMENT_DYNAMIC

    • DECLARE_DYNAMIC 用于在类的声明中启用RTTI支持,但通常不支持动态对象创建。
    • IMPLEMENT_DYNAMIC 用于在源文件中实现RTTI支持。
    • 这对于在运行时检查对象类型非常有用,但不支持动态创建对象。

三、实例

示例使用 DECLARE_DYNCREATEIMPLEMENT_DYNCREATE

cpp 复制代码
class CMyObject : public CObject
{
    DECLARE_DYNCREATE(CMyObject)

public:
    CMyObject();  // 构造函数

    // 其他成员函数和属性

    // 声明对象的序列化函数
    virtual void Serialize(CArchive& ar);
};

IMPLEMENT_DYNCREATE(CMyObject, CObject)

示例使用 DECLARE_DYNAMICIMPLEMENT_DYNAMIC

cpp 复制代码
class CMyObject : public CObject
{
    DECLARE_DYNAMIC(CMyObject)

public:
    CMyObject();  // 构造函数

    // 其他成员函数和属性
};

IMPLEMENT_DYNAMIC(CMyObject, CObject)

总之,DECLARE_DYNCREATEIMPLEMENT_DYNCREATE 主要用于支持对象的动态创建和RTTI,而 DECLARE_DYNAMICIMPLEMENT_DYNAMIC 主要用于支持RTTI。你可以根据你的需求选择适当的宏组合来满足你的类的需求。

参考:

DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)解析_无糖酸奶的博客-CSDN博客

相关推荐
blueman88886 小时前
Qt5通过vcpkg中调用时,在debug模式下调试时总是调用release的plugins文件夹中的dll
c++·qt·cmake
jinyishu_9 小时前
C++ string使用方法
开发语言·c++
乐观勇敢坚强的老彭9 小时前
C++浮点数使用注意事项
开发语言·c++
库克克9 小时前
【C++ 】内联函数
java·开发语言·c++
盐焗鹌鹑蛋9 小时前
【C++】红黑树
c++
aaPIXa62212 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
Starmoon_dhw12 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
某不知名網友12 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
hold?fish:palm13 小时前
从源码到可执行文件:C++程序的编译过程
开发语言·c++
lingran__14 小时前
C++_STL简介
开发语言·c++