Это классический пример Boost message_queue:
#include <boost/interprocess/ipc/message_queue.hpp>
using namespace boost::interprocess;
struct Data { ... };
int main() {
Data data1;
message_queue::remove("message_queue");
message_queue mq(create_only, "message_queue", 100, sizeof(Data));
mq.send(&data1, sizeof(Data), 0);
}
Теперь я хотел бы поместить объект mq
message_queue в класс в качестве переменной-члена с временем жизни объекта этого класса:
#include <boost/interprocess/ipc/message_queue.hpp>
using namespace boost::interprocess;
struct Data { ... };
class DataManager
{
message_queue mq;
public:
DataManager()
: mq(create_only, "message_queue", 100, sizeof(Data)) // ok
{
mq.Open(create_only, "message_queue", 100, sizeof(Data)); // Open does not exist
}
};
Кажется, я могу только инициализировать объект mq
в списке инициализации члена, так как message_queue
не предоставляет функции-члены для установки его параметров в более позднее время.
Я не прав? Есть ли другой способ сделать это?
Я хотел бы иметь возможность, например, позволить объекту использовать очередь сообщений, имя которой передается в качестве параметра одной из его функций-членов.
Спасибо.