1

我正在尝试创建一个简单的管理器,它将错误代码映射到函数。但是由于地图复制了值并且信号是不可复制的,所以这不是解决方案。我不能使用 shared_ptr 指针映射,因为 * 运算符在 boost::function 中被阻止。

我应该使用哪个集合来存储它?

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 回答