Set up BaseInfo information for DataVector/DataList elements. More...
Classes | |
struct | DVLEltBase_init< B > |
struct | DVLEltBase_init< DataModel_detail::NoBase > |
struct | DVLEltBase_init< VirtBases< B1, B2, B3 > > |
struct | DVLEltBase_init< DVLTYPE< B > > |
struct | RegisterDVLEltBaseInit< T > |
struct | DVLEltBaseInit< T > |
Defines | |
#define | DVLPASTE1(y, x) y##x |
#define | DVLPASTE2(y, x) DVLPASTE1(y,x) |
#define | DVLPASTE(x) DVLPASTE2(DVLTYPE,x) |
Set up BaseInfo information for DataVector/DataList elements.
DATAVECTOR_BASE(D,B)
macro, we want to record the D
, B
inheritance relation in SG::BaseInfo
. We can't just invoke SG_BASE
for this from DATAVECTOR_BASE
because there may be duplicates, and SG_BASE
won't compile in that case. But BaseInfo
has a deferred initialization mechanism, so we use that: we arrange for an appropriate initializer be added to the list. We also need to walk the DV/DL type information structures rather then the BaseInfo
ones.This is common code to be used for both DataVector
and DataList
. It should be included inside of the appropriate detail namespace. In addition, the macro DVLTYPE
should be defined as either DataVector
or DataList
. Then, the *_BASE macros should explicitly instantiate the template *_detailDVLEltBaseInit<T>
.