1

所以我正在使用 FastDelegate<> 和 boost 库编写一个事件处理系统。我需要为监听器设置一个指向事件数据的共享指针队列以及一个 FastDelegate> 列表。所以这就是问题所在。

侵入式列表和队列不允许 shared_ptr 甚至常量引用,这使我的代码导致编译时错误。无论如何,我可以做到这一点?

将共享 ptr 交给代表似乎是最安全的,这样事件就会一直存在,直到每个人都真正完成它。

4

1 回答 1

1

Q.侵入式列表和队列不允许 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(或只是 a std::vector)来代替。

甚至是不断的引用

常量引用也没有问题。你想用shared_ptr<const Event>吗?因为如果您要与多方共享活动,这是一个不错的选择。

于 2015-02-10T09:45:20.423 回答