2016-07-18 34 views
0

我真的不得不使用ClassImp宏來使ROOT中的自動字典和流媒體生成受益嗎?一些在線教程和示例提到它,但我注意到,僅僅將ClassDef(MyClass, <ver>)宏添加到MyClass.h並使用rootcint/rootcling處理它已經生成了大部分此類代碼。ROOT中的ClassImp預處理器宏 - 它真的需要嗎?

我確實看過Rtypes.h這些宏是在哪裏定義的,但是如果按照預處理宏調用對方並不容易,那麼專家可以確認ClassImp的作用會很好。我特別感興趣的是最近版本的ROOT> = 5.34

回答

0

這是我在roottalk郵件列表中得到的答案,確認ClassImp的使用已基本過時。

ClassImp用於在TClass中註冊類文件的源文件名稱 。這特別是由THtml使用的(現在有 已被棄用贊成Doxygen)。因此,除非你的代碼/框架 需要知道源文件的名稱,否則不再需要 具有ClassImp。

ClassDef對於從TObject繼承的類(或任何具有ClassDef的 類)是必需的。在其他情況下,它提供了使得I/O稍微更快的加速器(因此在這種情況下在技術上不是強制性的,因此 )。它還爲模式佈局分配版本 編號,以簡化編寫模式演變規則(另一方面,還有其他方法可將 版本編號分配給模式佈局)。

0

你究竟在做什麼? ClassImpClassDef宏將成員添加到提供Run-Time Type Information的類,並允許將類寫入根文件。如果您對此不感興趣,那麼請不要打擾這些宏。

我從來沒有使用過它們。

+0

我非常清楚爲什麼我們需要使用ClassDef。我只是想確認ClassImp沒有做任何有用的事情。事實上,這已經在roottalk郵件列表中得到確認,我會在這裏發佈他們的答案。 PS。 I/O也許是ROOT最好的部分 – plexoos