【问题标题】:ClassImp preprocessor macro in ROOT - Is it really needed?ROOT 中的 ClassImp 预处理器宏 - 真的需要吗?
【发布时间】:2016-11-21 04:11:53
【问题描述】:

我真的必须使用ClassImp 宏来使ROOT 中的自动字典和流媒体生成受益吗?一些在线教程和示例提到了它,但我注意到只需将 ClassDef(MyClass, <ver>) 宏添加到 MyClass.h 并使用 rootcint/rootcling 处理它已经生成了大部分此类代码。

我确实查看了Rtypes.h 定义这些宏的位置,但要遵循预处理器宏相互调用并不容易,因此,如果专家能够确认ClassImp 的作用,那就太好了。我对 ROOT >= 5.34 的最新版本特别感兴趣

【问题讨论】:

    标签: root-framework


    【解决方案1】:

    这是我在 roottalk 邮件列表上得到的答案,确认 ClassImp 的使用基本上已经过时了。

    ClassImp用于在TClass中注册源文件的名字 为班级。 THtml(现在已经 已被弃用,取而代之的是 Doxygen)。所以除非你编码/框架 需要知道源文件的名称,不再需要 拥有 ClassImp。

    ClassDef 对于继承自 TObject(或任何 具有 ClassDef 的类)。在其他情况下,它提供 使 I/O 稍微快一点的加速器(因此是 在这种情况下,技术上不是强制性的)。它还分配一个版本 模式布局的编号,可简化编写模式演变 规则(另一方面,还有其他选择来分配 模式布局的版本号)。

    【讨论】:

      【解决方案2】:

      你到底想做什么? ClassImpClassDef 宏将成员添加到提供 Run-Time Type Information 的类并允许将类写入根文件。如果您对此不感兴趣,请不要理会这些宏。

      我从不使用它们。

      【讨论】:

      • 我很清楚为什么我们需要使用 ClassDef。我只是想确认 ClassImp 没有做任何有用的事情。事实上,这已在 roottalk 邮件列表中得到确认,我将在此处发布他们的答案。 PS。 I/O 可能是 ROOT 中最好的部分
      猜你喜欢
      • 2022-03-08
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      相关资源
      最近更新 更多