2014-02-18 91 views
0

好吧,我有回調的列表,回調的定義如下:從列表中刪除回調函數?

typedef std::function<void(Event*)> Callback; 

現在,如果我嘗試通過

callbackBindings[index].remove(callback);

刪除從該列表中的對象,我得到

錯誤100錯誤C2248:'std :: function < _Fty> :: operator ==':無法訪問在類中聲明的私有成員'std :: function < _Fty>'D:\ Program \ Development \ Visual Studio Ultimate 2012 \ VC \ include \ list 1592 1 D-Tris

如何從列表中刪除元素?

PS:CallbackBindings看起來是這樣的:

static std::unordered_map<std::type_index, std::list<Callback>> callbackBindings; 

回答

2

你不能比較平等std::function對象。您必須通過其他方式將其刪除,例如通過索引或迭代器(您必須在保存回調時存儲),或通過映射鍵在關聯容器中。

(例如,假設你插入到您作爲[](Event*){}本地指定的回調。沒有任何機制或邏輯告訴任何兩個這樣的表達是否應被視爲「相等」。)