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博客

相关推荐
啊森要自信21 分钟前
【Linux 学习指南】网络编程基础:从 IP、端口到 Socket 与 TCP/UDP 协议详解
linux·运维·服务器·网络·c++
刚入坑的新人编程1 小时前
暑期算法训练.2
c++·算法
hardStudy_h1 小时前
C++——模版(函数模版和类模版)
开发语言·c++
有趣的我2 小时前
30 天自制 C++ 服务器--Day3
服务器·c++
豆浩宇2 小时前
Halcon双相机单标定板标定实现拼图
c++·人工智能·目标检测·机器学习·计算机视觉
☆平常心☆2 小时前
UE5 相机后处理材质与动态参数修改
c++·ue5·材质
阿猿收手吧!3 小时前
【高并发服务器】多路复用的总结 eventfd timerfd
服务器·c++·计算机网络
m0_535064604 小时前
C++类模版与友元
java·c++·算法
山河木马4 小时前
前端学C++可太简单了:导入标准库
前端·javascript·c++
Am心若依旧4094 小时前
C++设计模式之创建型模式
java·开发语言·数据结构·c++·设计模式