Boost :: IntrusiveList с общими указателями

Поэтому я пишу систему обработки событий, используя FastDelegate<> и буст библиотеки. Мне нужно настроить очередь общих указателей на данные событий, а также список FastDelegate> для слушателей. Так вот в чем проблема.

Навязчивый список и очередь не допускают shared_ptr или даже постоянные ссылки, что делает мой код причиной ошибок времени компиляции. В любом случае, что я могу сделать это?

Представляется, что безопаснее передать делегатам общий ptr таким образом, чтобы событие продолжалось до тех пор, пока все действительно не покончили с ним.

1

Решение

Q. Навязчивый список и очередь не позволяют shared_ptr

Нет проблем:

Жить на Колиру

#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>? Потому что это хороший вариант, если вы делитесь событием с несколькими участниками.

1

Другие решения


По вопросам рекламы [email protected]