Synopsis of classdesc

Syntax:

classdesc [-workdir directory] [-include include-file] [-I directory] [-i input-file ] [-nodef] [-respect_private] [-use_mbr_pointers] [-typeName] [-onbase] [-qt] [-overload] descriptors...

classdesc takes as its input the preprocessed model definition file, that contains all class definitions available to the model. It outputs a functor definition that recursively calls itself for each of the members of that class. If -workdir is specified, the functor definitions are written to the specified directory for later compilation into a library. The (pre-expanded) source header file should also be included via the -include switch so that all necessary types are defined. If -workdir is not specified, the functor definitions are output as inline declarations on standard output.

Normally, classdesc reads its input from standard input, but some operating systems have trouble with this (eg Windows, but not Cygwin). An alternative is to specify the input file using the -i flag.

If -I switches are specified, the specified directory will be added to the search path for the action base include files.

If a type has been forward declared (eg class foo;), but not defined in classdesc's input source, a dummy definition is emitted of the form class foo {};. The purpose of this is to ensure that the action routines for types containing pointers to such declared types will compile. This behaviour can be turned off by specifying the -nodef option to classdesc.

By default, classdesc will generate descriptors that access private and protected members. If a class has private or protected members, a CLASSDESC_ACCESS declaration needs to be given to allow access to the private members. Alternatively, it may be undesirable to expose the internals of an object, for example if the object is being exposed to a different programming environment. In such a case, the -respect_private can be used to suppress the accessing of private or protected members.

By default, enums are treated as integers. Sometimes it is desirable to treat them symbolically, and this is managed by the -typeName option. As well as enum enumerators, -typeName enables the typeName descriptor which returns the name of a C++ type as a string.

-use_mbr_pointers outputs the containing object and its member pointer, rather than an address to the member itself. This is important for reflecting C++ types, rather than static C++ objects, such as is needed in the RESTProcess descriptor.

-onbase turns on the ability to distinguish between an action called on a base class and one called on a member. If your descriptor does not require this distinction, simply provide a method that calls to the original descriptor:

template <class T>
void pack_onbase(pack_t& x,const string& d,T& a)
{::pack(x,d,a);}
By default, -onbase is disabled as enabling it will break existing code. -onbase will become the default in Classdesc.4

-qt Allows for MOC header files to be processed.

-overload Will emit descriptor definitions for each overload of an overloaded method. By default, overloaded methods are ignored. There are some limitations in using the overloaded method reflection, so if you descriptor doesn't need to access overloaded methods, its easier and safer to leave this switch disabled.