Looking for a better C++ class factory

前端 未结 10 742
伪装坚强ぢ
伪装坚强ぢ 2020-12-29 00:40

I have an application that has several objects (about 50 so far, but growing). There is only one instance of each of these objects in the app and these instances get shared

10条回答
  •  梦谈多话
    2020-12-29 01:30

    My use-case tended to get a little more complex - I needed the ability to do a little bit of object initialization and I needed to be able to load objects from different DLLs based on configuration (e.g. simulated versus actual for hardware). It started looking like COM and ATL was where I was headed, but I didn't want to add the weight of COM to the OS (this is being done in CE).

    What I ended up going with was template-based (thanks litb for putting me on track) and looks like this:

    class INewTransModule
    {
      public:
        virtual bool Init() { return true; }
        virtual bool Shutdown() { return true; }
    };
    
    template 
    struct BrokeredObject
    {
    public:
        inline static T* GetInstance()
      {
        static T t;
        return &t;
      }
    };
    
    template <> 
    struct BrokeredObject
    {
    public:
        inline static INewTransModule* GetInstance()
      {
        static INewTransModule t;
        // do stuff after creation
        ASSERT(t.Init());
        return &t;
      }
    };
    
    class OBJECTBROKER_API ObjectBroker
    {
      public: 
        // these calls do configuration-based creations
        static ITraceTool  *GetTraceTool();
        static IEeprom     *GetEeprom();
        // etc
    };
    

    Then to ensure that the objects (since they're templated) actually get compiled I added definitions like these:

    class EepromImpl: public BrokeredObject, public CEeprom
    {
    };
    
    class SimEepromImpl: public BrokeredObject, public CSimEeprom
    {
    };
    

提交回复
热议问题