More doxygen topic overview cleanup.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52133 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        runtimeclass
 | 
			
		||||
// Name:        runtimeclass.h
 | 
			
		||||
// Purpose:     topic overview
 | 
			
		||||
// Author:      wxWidgets team
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
@@ -8,104 +8,124 @@
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 | 
			
		||||
 @page runtimeclass_overview Runtime class information (aka RTTI) overview
 | 
			
		||||
@page overview_runtimeclass Runtime Class Information (RTTI)
 | 
			
		||||
 | 
			
		||||
 Classes: #wxObject, #wxClassInfo.
 | 
			
		||||
 One of the failings of C++ used to be that no run-time information was provided
 | 
			
		||||
 about a class and its position in the inheritance hierarchy.
 | 
			
		||||
 Another, which still persists, is that instances of a class cannot be created
 | 
			
		||||
 just by knowing the name of a class, which makes facilities such as persistent
 | 
			
		||||
 storage hard to implement.
 | 
			
		||||
 Most C++ GUI frameworks overcome these limitations by means of a set of
 | 
			
		||||
 macros and functions and wxWidgets is no exception. As it originated before the
 | 
			
		||||
 addition of RTTI to the C++ standard and as support for it is still missing from
 | 
			
		||||
 some (albeit old) compilers, wxWidgets doesn't (yet) use it, but provides its
 | 
			
		||||
 own macro-based RTTI system.
 | 
			
		||||
 In the future, the standard C++ RTTI will be used though and you're encouraged
 | 
			
		||||
 to use whenever possible the #wxDynamicCast() macro which,
 | 
			
		||||
 for the implementations that support it, is defined just as dynamic_cast and
 | 
			
		||||
 uses wxWidgets RTTI for all the others. This macro is limited to wxWidgets
 | 
			
		||||
 classes only and only works with pointers (unlike the real dynamic_cast which
 | 
			
		||||
 also accepts references).
 | 
			
		||||
 Each class that you wish to be known to the type system should have
 | 
			
		||||
 a macro such as DECLARE_DYNAMIC_CLASS just inside the class declaration.
 | 
			
		||||
 The macro IMPLEMENT_DYNAMIC_CLASS should be in the implementation file.
 | 
			
		||||
 Note that these are entirely optional; use them if you wish to check object
 | 
			
		||||
 types, or create instances of classes using the class name. However,
 | 
			
		||||
 it is good to get into the habit of adding these macros for all classes.
 | 
			
		||||
 Variations on these #macros are used for multiple inheritance, and abstract
 | 
			
		||||
 classes that cannot be instantiated dynamically or otherwise.
 | 
			
		||||
 DECLARE_DYNAMIC_CLASS inserts a static wxClassInfo declaration into the
 | 
			
		||||
 class, initialized by IMPLEMENT_DYNAMIC_CLASS. When initialized, the
 | 
			
		||||
 wxClassInfo object inserts itself into a linked list (accessed through
 | 
			
		||||
 wxClassInfo::first and wxClassInfo::next pointers). The linked list
 | 
			
		||||
 is fully created by the time all global initialisation is done.
 | 
			
		||||
 IMPLEMENT_DYNAMIC_CLASS is a macro that not only initialises the static
 | 
			
		||||
 wxClassInfo member, but defines a global function capable of creating a
 | 
			
		||||
 dynamic object of the class in question. A pointer to this function is
 | 
			
		||||
 stored in wxClassInfo, and is used when an object should be created
 | 
			
		||||
 dynamically.
 | 
			
		||||
 wxObject::IsKindOf uses the linked list of
 | 
			
		||||
 wxClassInfo. It takes a wxClassInfo argument, so use CLASSINFO(className)
 | 
			
		||||
 to return an appropriate wxClassInfo pointer to use in this function.
 | 
			
		||||
 The function #wxCreateDynamicObject can be used
 | 
			
		||||
 to construct a new object of a given type, by supplying a string name.
 | 
			
		||||
 If you have a pointer to the wxClassInfo object instead, then you
 | 
			
		||||
 can simply call wxClassInfo::CreateObject.
 | 
			
		||||
 #wxClassInfo
 | 
			
		||||
 #Example
 | 
			
		||||
@li @ref overview_runtimeclass_intro
 | 
			
		||||
@li @ref overview_runtimeclass_classinfo
 | 
			
		||||
@li @ref overview_runtimeclass_example
 | 
			
		||||
 | 
			
		||||
@seealso
 | 
			
		||||
 | 
			
		||||
@li wxObject
 | 
			
		||||
@li wxClassInfo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 @section wxclassinfooverview wxClassInfo
 | 
			
		||||
 | 
			
		||||
 #Runtime class information (aka RTTI) overview
 | 
			
		||||
 Class: #wxClassInfo
 | 
			
		||||
 This class stores meta-information about classes. An application
 | 
			
		||||
 may use macros such as DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS
 | 
			
		||||
 to record run-time information about a class, including:
 | 
			
		||||
<hr>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  its position in the inheritance hierarchy;
 | 
			
		||||
  the base class name(s) (up to two base classes are permitted);
 | 
			
		||||
  a string representation of the class name;
 | 
			
		||||
  a function that can be called to construct an instance of this class.
 | 
			
		||||
@section overview_runtimeclass_intro Introduction
 | 
			
		||||
 | 
			
		||||
One of the failings of C++ used to be that no run-time information was provided
 | 
			
		||||
about a class and its position in the inheritance hierarchy. Another, which
 | 
			
		||||
still persists, is that instances of a class cannot be created just by knowing
 | 
			
		||||
the name of a class, which makes facilities such as persistent storage hard to
 | 
			
		||||
implement.
 | 
			
		||||
 | 
			
		||||
Most C++ GUI frameworks overcome these limitations by means of a set of macros
 | 
			
		||||
and functions and wxWidgets is no exception. As it originated before the
 | 
			
		||||
addition of RTTI to the C++ standard and as support for it is still missing
 | 
			
		||||
from some (albeit old) compilers, wxWidgets doesn't (yet) use it, but provides
 | 
			
		||||
it's own macro-based RTTI system.
 | 
			
		||||
 | 
			
		||||
In the future, the standard C++ RTTI will be used though and you're encouraged
 | 
			
		||||
to use whenever possible the wxDynamicCast macro which, for the implementations
 | 
			
		||||
that support it, is defined just as dynamic_cast and uses wxWidgets RTTI for
 | 
			
		||||
all the others. This macro is limited to wxWidgets classes only and only works
 | 
			
		||||
with pointers (unlike the real dynamic_cast which also accepts references).
 | 
			
		||||
 | 
			
		||||
Each class that you wish to be known to the type system should have a macro
 | 
			
		||||
such as DECLARE_DYNAMIC_CLASS just inside the class declaration. The macro
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS should be in the implementation file. Note that these
 | 
			
		||||
are entirely optional; use them if you wish to check object types, or create
 | 
			
		||||
instances of classes using the class name. However, it is good to get into the
 | 
			
		||||
habit of adding these macros for all classes.
 | 
			
		||||
 | 
			
		||||
Variations on these macros are used for multiple inheritance, and abstract
 | 
			
		||||
classes that cannot be instantiated dynamically or otherwise.
 | 
			
		||||
 | 
			
		||||
DECLARE_DYNAMIC_CLASS inserts a static wxClassInfo declaration into the class,
 | 
			
		||||
initialized by IMPLEMENT_DYNAMIC_CLASS. When initialized, the wxClassInfo
 | 
			
		||||
object inserts itself into a linked list (accessed through wxClassInfo::first
 | 
			
		||||
and wxClassInfo::next pointers). The linked list is fully created by the time
 | 
			
		||||
all global initialisation is done.
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS is a macro that not only initialises the static
 | 
			
		||||
wxClassInfo member, but defines a global function capable of creating a dynamic
 | 
			
		||||
object of the class in question. A pointer to this function is stored in
 | 
			
		||||
wxClassInfo, and is used when an object should be created dynamically.
 | 
			
		||||
 | 
			
		||||
wxObject::IsKindOf uses the linked list of wxClassInfo. It takes a wxClassInfo
 | 
			
		||||
argument, so use CLASSINFO(className) to return an appropriate wxClassInfo
 | 
			
		||||
pointer to use in this function.
 | 
			
		||||
 | 
			
		||||
The function wxCreateDynamicObject can be used to construct a new object of a
 | 
			
		||||
given type, by supplying a string name. If you have a pointer to the
 | 
			
		||||
wxClassInfo object instead, then you can simply call wxClassInfo::CreateObject.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 The DECLARE_... macros declare a static wxClassInfo variable in a class, which is initialized
 | 
			
		||||
 by macros of the form IMPLEMENT_... in the implementation C++ file. Classes whose instances may be
 | 
			
		||||
 constructed dynamically are given a global constructor function which returns a new object.
 | 
			
		||||
 You can get the wxClassInfo for a class by using the CLASSINFO macro, e.g. CLASSINFO(wxFrame).
 | 
			
		||||
 You can get the wxClassInfo for an object using wxObject::GetClassInfo.
 | 
			
		||||
 See also #wxObject and #wxCreateDynamicObject.
 | 
			
		||||
@section overview_runtimeclass_classinfo wxClassInfo
 | 
			
		||||
 | 
			
		||||
 @section runtimeclassinformationexample Example
 | 
			
		||||
This class stores meta-information about classes. An application may use macros
 | 
			
		||||
such as DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS to record run-time
 | 
			
		||||
information about a class, including:
 | 
			
		||||
 | 
			
		||||
 In a header file frame.h:
 | 
			
		||||
@li It's position in the inheritance hierarchy.
 | 
			
		||||
@li The base class name(s) (up to two base classes are permitted).
 | 
			
		||||
@li A string representation of the class name.
 | 
			
		||||
@li A function that can be called to construct an instance of this class.
 | 
			
		||||
 | 
			
		||||
 @code
 | 
			
		||||
 class wxFrame : public wxWindow
 | 
			
		||||
 {
 | 
			
		||||
 DECLARE_DYNAMIC_CLASS(wxFrame)
 | 
			
		||||
The DECLARE_... macros declare a static wxClassInfo variable in a class, which
 | 
			
		||||
is initialized by macros of the form IMPLEMENT_... in the implementation C++
 | 
			
		||||
file. Classes whose instances may be constructed dynamically are given a global
 | 
			
		||||
constructor function which returns a new object.
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
     wxString m_title;
 | 
			
		||||
You can get the wxClassInfo for a class by using the CLASSINFO macro, e.g.
 | 
			
		||||
CLASSINFO(wxFrame). You can get the wxClassInfo for an object using
 | 
			
		||||
wxObject::GetClassInfo.
 | 
			
		||||
 | 
			
		||||
 public:
 | 
			
		||||
     ...
 | 
			
		||||
 };
 | 
			
		||||
 @endcode
 | 
			
		||||
@seeaslso
 | 
			
		||||
 | 
			
		||||
 In a C++ file frame.cpp:
 | 
			
		||||
 | 
			
		||||
 @code
 | 
			
		||||
 IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
 | 
			
		||||
 | 
			
		||||
 wxFrame::wxFrame()
 | 
			
		||||
 {
 | 
			
		||||
 ...
 | 
			
		||||
 }
 | 
			
		||||
 @endcode
 | 
			
		||||
 | 
			
		||||
 */
 | 
			
		||||
@li wxObject
 | 
			
		||||
@li wxCreateDynamicObject
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@section overview_runtimeclass_example Example
 | 
			
		||||
 | 
			
		||||
In a header file frame.h:
 | 
			
		||||
 | 
			
		||||
@code
 | 
			
		||||
class wxFrame : public wxWindow
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxFrame)
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    wxString m_title;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
...
 | 
			
		||||
};
 | 
			
		||||
@endcode
 | 
			
		||||
 | 
			
		||||
In a C++ file frame.cpp:
 | 
			
		||||
 | 
			
		||||
@code
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
 | 
			
		||||
 | 
			
		||||
wxFrame::wxFrame()
 | 
			
		||||
{
 | 
			
		||||
...
 | 
			
		||||
}
 | 
			
		||||
@endcode
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user