1

エラーコードを関数にマップする単純なマネージャーを作成しようとしています。しかし、マップは値をコピーし、信号はコピーできないため、解決策ではありません。*演算子がboost::functionでブロックされているため、shared_ptrポインターのマップを使用できません。

これを保存するには、どのコレクションを使用する必要がありますか?

typedef boost::function<bool (shared_ptr<EngineEvent> event,long timeSinceEvent)> EngineErrorHandler;
typedef boost::signal<bool (  EngineErrorHandler )> ErrorSignal;
typedef std::map<EventErrorType,ErrorSignal> ErrorHandlers;

class ServiceErrorManager {

    public:
        static ServiceErrorManager* getInstance();

        void registerErrorHandler(EngineErrorHandler& handler,EventErrorType subScribeTo);
        void signalEngineEventfail(shared_ptr<EngineEvent> event);

    private:
        static ServiceErrorManager* m_pInstance;

       ErrorHandlers errorTypeToSignal;

        ServiceErrorManager();
        ~ServiceErrorManager();
    };
}
4

1 に答える 1

1

カスタム述語を使用して、常にすべてを構造体に格納し、shared_ptr または unique_ptr オブジェクトをマップまたはセット内に格納できます。これにより、コードがもう少し自明になるようです。

于 2012-11-16T10:00:30.740 に答える