Because serialisation requires access to the private parts of a class definition, by default classdesc will emit actions for all members of class, whether private or public. Either all members of the class need to be declared public, or a friend declaration needs to be inserted so as to allow the action function to have access to the private members. The best way to do this is to put a CLASSDESC_ACCESS declaration in the class's definition, as in the following example:
class foo
{
int x, y
CLASSDESC_ACCESS(foo);
public:
int z;
}
template <class T>
class bar
{
T x, y
CLASSDESC_ACCESS(bar);
public:
T z;
}
The macro takes a single argument -- the typename of class in question. The program insert-friend parses it input, and outputs a copy with these declarations appropriately inserted. This may be used to automate the process, but is not 100% reliable.
The CLASSDESC_ACCESS_TEMPLATE is now deprecated, and is synonymous with CLASSDESC_ACCESS.
The header file classdesc_access.h
defines versions of these macros for the pack/unpack actions --
use this file as a guide for writing your own macros if you implement
other actions.
On the other hand, for descriptors like isa, and for exposure
descriptors like TCL_obj in Eco Lab, it is not desirable to
process private members. For these purposes, use
-respect_private command line flag of classdesc.