【问题标题】:A map of boost:signals with boost:function definition带有 boost:function 定义的 boost:signals 映射
【发布时间】:2012-11-16 07:19:50
【问题描述】:

我正在尝试创建一个简单的管理器,它将错误代码映射到函数。但是由于地图复制了值并且信号是不可复制的,所以这不是解决方案。我不能使用 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();
    };
}

【问题讨论】:

    标签: c++ shared-ptr boost-function boost-signals


    【解决方案1】:

    您始终可以将所有内容存储到结构中,并使用自定义谓词将 shared_ptr 或 unique_ptr 对象存储在映射或集合中。这似乎也会使您的代码更加不言自明。

    【讨论】:

    • 如何去做这件事?
    猜你喜欢
    • 2020-07-03
    • 2018-10-02
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    相关资源
    最近更新 更多