#define OBJECT_HEADER(derivedClass) 如何对RTTI有帮助?

superwavelet 2016-07-22 07:13:52
说是这样定义macro对RTTI有帮助:

在 Base.h 文件里面定义基类:

class Base{

...
};

然后:
#define OBJECT_HEADER(derivedClass) \
public: \
virtual SharedPtr<Base> _virtualClone() const; \
SharedPtr<derivedClass> _clone() const; \
static Base* createInstance (); \
static const Type& classTypeID (); \
virtual const Type& type() const; \
static void constructType(); \
static void destructType();

说明是这样的:
The code comment says that OBJECT_HEADER Helps build the Run-Time Typing Information (RTTI) for the given class derivedClass. This macro is required in the class definition of any class derived from Base or its derivatives.

Thus, in the example usage:

class derivedClass: public Base
{
OBJECT_HEADER(derivedClass)

public:
...

};


不明白这个宏定义怎么帮助RTTI, 并且, 事实上没看懂这个宏定义,一个字符串,预编译器怎么知道分解里面的函数比如:createInstance 这个函数在宏的字串里面。

同时,在Base.h这个文件里面 createInstance 没有定义在类里面,而是作为自由函数:
inline SharedPtr<Base> createInstance(const Type* pType)  { return pType->createInstance(); }
...全文
229 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-07-23
  • 打赏
  • 举报
回复
这应该是几个宏联合作用 跟MFC类库相似的方法 在 类内部定义(声明)一些东西,,,这里都是些函数() 最终这些函数也是要实现的 要想明白,需要可看看整个框架是怎么处理的。
cutmelon 2016-07-22
  • 打赏
  • 举报
回复
引用 1 楼 cutmelon 的回复:
你要是看不明白一个宏,就收工在代码里替换展开,再看看估计就清楚了
手工,不是收工
cutmelon 2016-07-22
  • 打赏
  • 举报
回复
你要是看不明白一个宏,就收工在代码里替换展开,再看看估计就清楚了
内容概要:本文围绕基于BP神经网络的水质预测方法展开,详细介绍了利用Matlab实现数据驱动的BP神经网络模型构建过程,旨在通过对水质参数(如pH、溶解氧、浊度等)的历史数据进行训练,实现对未来水质变化趋势的科学预测。该方法突出“数据驱动”特性,强调模型在环境工程与智能算法融合领域的应用价值,适用于科研复现与学术论文撰写,尤其适合作为EI/SCI级别论文中的算法模型支撑。配套资源包含完整的Matlab代码、实验数据及仿真模型,便于用户直接运行、复现结果并进行二次开发与拓展应用。; 适合人群:具备一定编程基础,熟悉Matlab编程环境,从事环境科学、水利工程、智能算法应用等相关领域研究,工作或学习年限在1-3年的科研人员或研究生。; 使用场景及目标:①利用BP神经网络对水质指标进行时序预测,评估水体污染发展趋势;②构建水环境保护与治理的智能决策支持系统;③在撰写EI/SCI论文时作为核心算法模型进行复现与对比实验,提升研究成果的可信度与创新性; 阅读建议:此资源以数据驱动为核心,建议读者结合所提供的Matlab代码与真实水质数据集开展实践操作,重点关注网络结构设计、训练参数调优、过拟合防范及预测结果可视化分析流程,同时可尝试将模型迁移至其他环境预测场景以增强泛化能力与科研适应性。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧