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

相关推荐
clint4564 天前
C++进阶(1)——前景提要
c++
夜悊4 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴4 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0014 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
玖玥拾5 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
один but you5 天前
constexpr函数
c++
凡人叶枫5 天前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++
凡人叶枫5 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
小胖xiaopangss5 天前
BRpc使用
c++·rpc
-森屿安年-5 天前
63. 不同路径 II
c++·算法·动态规划