Поэтому я пишу систему обработки событий, используя FastDelegate<> и буст библиотеки. Мне нужно настроить очередь общих указателей на данные событий, а также список FastDelegate> для слушателей. Так вот в чем проблема.
Навязчивый список и очередь не допускают shared_ptr или даже постоянные ссылки, что делает мой код причиной ошибок времени компиляции. В любом случае, что я могу сделать это?
Представляется, что безопаснее передать делегатам общий ptr таким образом, чтобы событие продолжалось до тех пор, пока все действительно не покончили с ним.
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>
? Потому что это хороший вариант, если вы делитесь событием с несколькими участниками.