
/** \page class The Described Class Library

The class library provides the DescribedClass base class which provides
mechanisms that allows programmers to retrieve information about a
DescribedClass descendant's name; parents; and default, StateIn, and KeyVal
constructors.

The special nature of described classes requires that the base class,
DescribedClass, cannot provide everything needed.  To assist the user in
setting up described classes a helper class, ClassDesc, is provided.
Foreach descendent of DescribedClass an object of type ClassDesc must be
created.  These objects should be static so they are initialized before
main is entered.

The ClassDesc constructor takes the following arguments:

<dl>
<dt><b>const std::type_info& typeinfo</b>
    <dd>The type_info for this class, as returned by the C++ typeid operator.
<dt><b>const char *name</b>
    <dd>The name of this class.
<dt><b>int version</b>
    <dd>The version of this class.  This is used to enable restoration
        of objects that were saved with older versions of a class.
        Version numbers must be 1 or greater.
<dt><b>const char *parents</b>
    <dd>The parents of this class.  This must be given exactly
        as it is given in the class declaration, including all
        qualifiers.
<dt><b>DescribedClass* (*ctor)()</b>
    <dd>A function that creates an object of this type using the
        default constructor.  The default is 0 (meaning that no
        constructor is available.
<dt><b>DescribedClass* (*keyval_ctor)(const Ref<KeyVal>&)</b>
    <dd>A function that creates an object of this type using the
        KeyVal constructor. The default is 0.
<dt><b>DescribedClass* (*statein_ctor)(StateIn&)</b>
    <dd>A function that creates an object of this type using the
        StateIn constructor. The default is 0.
</dl>

For example, consider the class, D:

<pre>
class D: public B, public C {
  public:
    D();    
};
</pre>

The file implementing D would contain the following line:

<pre>
static ClassDesc D_cd(typeid(D),"D",1,"public B, public C",create\<D\>);
</pre>

*/
