Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 24, 2009, 12:15:20 AM (16 years ago)
Author:
landauf
Message:

simplified ClassFactory creation
fixed typo in Factory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core5/src/libraries/core/ClassFactory.h

    r5769 r5777  
    5454    {
    5555        public:
     56            virtual ~BaseFactory() {};
    5657            virtual BaseObject* fabricate(BaseObject* creator) = 0;
    57             virtual ~BaseFactory() {};
    5858    };
    5959
     
    6666    {
    6767        public:
    68             static bool create(const std::string& name, bool bLoadable = true);
     68            ClassFactory(const std::string& name, bool bLoadable = true);
    6969            BaseObject* fabricate(BaseObject* creator);
    70 
    71         private:
    72             ClassFactory() {}                               // Don't create
    73             ClassFactory(const ClassFactory& factory) {}    // Don't copy
    74             virtual ~ClassFactory() {}                      // Don't delete
    75 
    76             static T* createNewObject(BaseObject* creator);
    7770    };
    7871
     
    8477    */
    8578    template <class T>
    86     bool ClassFactory<T>::create(const std::string& name, bool bLoadable)
     79    ClassFactory<T>::ClassFactory(const std::string& name, bool bLoadable)
    8780    {
    8881        COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;
    89         ClassIdentifier<T>::getIdentifier(name)->addFactory(new ClassFactory<T>);
     82        ClassIdentifier<T>::getIdentifier(name)->addFactory(this);
    9083        ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable);
    9184        Factory::add(name, ClassIdentifier<T>::getIdentifier());
    92 
    93         return true;
    9485    }
    9586
     
    10192    inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator)
    10293    {
    103         return ClassFactory<T>::createNewObject(creator);
    104     }
    105 
    106     /**
    107         @brief Creates and returns a new object of class T; this is a wrapper for the new operator.
    108         @return The new object
    109     */
    110     template <class T>
    111     inline T* ClassFactory<T>::createNewObject(BaseObject* creator)
    112     {
    113         return new T(creator);
     94        return static_cast<BaseObject*>(new T(creator));
    11495    }
    11596}
Note: See TracChangeset for help on using the changeset viewer.