2015-02-09 104 views
1

所以我正在使用FastDelegate和boost庫編寫一個事件處理系統。我需要爲事件數據設置一個共享指針的隊列,以及爲聽衆設置一個FastDelegate>的列表。所以這是問題。Boost :: IntrusiveList with Shared Pointers

侵入式列表和隊列不允許shared_ptr或甚至是常量引用,這會導致我的代碼導致編譯時錯誤。無論如何,我可以做到這一點?

把這個共享ptr交給委託人看來是最安全的,直到每個人都真正完成它。

回答

1

問:侵入列表和隊列不允許的shared_ptr

沒有問題:

Live On Coliru

#include <boost/intrusive/list.hpp> 
#include <boost/shared_ptr.hpp> 

struct Event {}; 

struct Node : boost::intrusive::list_base_hook<> { 
    boost::shared_ptr<Event> event { new Event }; 
}; 

typedef boost::intrusive::list<Node> event_list; 

int main() { 
    std::vector<Node> nodes(10); 

    event_list pending; 
    pending.push_back(nodes[3]); 
    pending.push_back(nodes[7]); 
} 

從你期望的事實(?)intrusive::list<T>T = shared_ptr<...>工作告訴我,你想要一個簡單的std::list(或只是一個std::vector),而不是。

甚至經常提到

經常提到的也不是問題。你想使用shared_ptr<const Event>嗎?因爲如果您與多方共享活動,這是一個不錯的選擇。

+0

這太好了!非常感謝! – guitar80 2015-02-10 15:06:10

相關問題