CLASSDESC_ACCESS

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.