Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Namespace Members | Data Fields | Globals
common

cloneable_object.hpp

Go to the documentation of this file.
00001 //
00002 // See license.txt for license information.
00003 //
00004 // cloneable_object.hpp
00005 //
00006 // 17-Jul-2003 phamilton Created
00007 //
00008 
00009 #ifndef incCOMMON_CLONEABLE_OBJECT
00010 #define incCOMMON_CLONEABLE_OBJECT
00011 
00012 // forwards
00013 #include <string>
00014 
00015 namespace ph {
00016 namespace common {
00017 
00018 class cloneable_object_context;
00019 class object_base;
00020 
00021 class cloneable_object_base
00022 /**
00023  Abstract class representing the interface for an object to be cloned.
00024 
00025  This is an important part of allowing objects to be used in the
00026  Abstract Factory pattern, which is used heavily in persistance.
00027 */
00028 {
00029 public:
00030 virtual ~cloneable_object_base() {}
00031 
00032 virtual bool construct(cloneable_object_context *context) = 0;
00033  //!< Allow objects to construct themselves WITH inheritence.
00034  //! it's up to the impementation to call this on the object
00035  //! when it is created (or cloned from another).
00036 
00037 virtual object_base *clone(
00038 const std::string &name, 
00039 cloneable_object_context *context) const = 0;
00040  //!< Clone this object.
00041  //!
00042 
00043 virtual object_base *subclass(
00044 const std::string &name, 
00045 cloneable_object_context *context) const = 0;
00046  //!< Subclassing copies the object,but makes it's "type" the
00047  //! name of this object, and makes the "name" equal to the name passed in.
00048  //! This allows an object to be a virtual copy of another, except
00049  //! for the type identifier. This feature is used in template
00050  //! systems.
00051 };
00052 
00053 class cloneable_object_context
00054 /**
00055  Abstract class representing a context that is passed when objects
00056  are cloned.
00057 */
00058 {
00059 public:
00060 virtual ~cloneable_object_context() {};
00061 };
00062 
00063 }; // common
00064 }; // ph
00065 
00066 #endif // incCOMMON_CLONEABLE_OBJECT

Generated on Wed Apr 5 22:03:23 2006 for cppxmlobj by doxygen 1.4.3

AltStyle によって変換されたページ (->オリジナル) /