我來自C#並試圖在C++ 11中實現一個簡單的事件/事件處理程序模式,我相信通用名稱是觀察者和信號,我知道有增強庫和其他人,但我不想使用任何外部庫。C++ 11觀察者傳遞參數通知
在網上搜索時,我發現我需要的一個簡單的實現,所以我採取和修改了代碼,它工作正常。
我的問題是,當註冊events/observers時傳遞的參數,而不是當我提高/信號/通知我覺得有點尷尬。
class EventManager
{
private:
static std::map<EventType, std::vector<std::function<void()>>> _eventHandlers;
public:
EventManager() = default;
template <typename EventHandler>
static void RegisterEventHandler(EventType&& eventType, EventHandler&& eventHandler)
{
EventManager::_eventHandlers[std::move(eventType)].push_back(std::forward<EventHandler>(eventHandler));
}
static void Raise(const EventType& event)
{
for (const auto& eventHandler : EventManager::_eventHandlers.at(event))
{
eventHandler();
}
}
// disallow copying and assigning
EventManager(const EventManager&) = delete;
EventManager& operator=(const EventManager&) = delete;
};
任何人都可以通過在提高事件時添加接受參數的功能來擴展以下代碼嗎?
感謝您的答案,但如果方法是靜態的,因爲您需要初始化EventManager類併爲事件處理程序定義參數/參數模板,所以這不起作用,對吧? – Ronny 2015-04-10 17:31:18
使用靜態方法和靜態'_handlers'成員將工作得很好。 – 2015-04-12 18:54:57
好的,謝謝如果你不介意的話,我會嘗試修改代碼並回復給你,但是,由於你付出了時間和精力來幫助我,謝謝,謝謝。 – Ronny 2015-04-12 21:14:03