Я пытаюсь создать простой менеджер, который будет отображать коды ошибок для функций. Но поскольку карта копирует значения, а сигнал не копируется, это не является решением. Я не могу использовать карту указателей 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();};
}
Вы всегда можете хранить все в структуре и хранить объекты shared_ptr или unique_ptr на карте или в наборе с использованием пользовательского предиката. Похоже, это сделает ваш код немного более понятным.
Других решений пока нет …