gpt4 book ai didi

c++ - Boost message_queue : just the constructor lets me configure it, 无其他成员函数可用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:37 26 4
gpt4 key购买 nike

这是一个经典的 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不提供成员函数来稍后设置它的参数。

我错了吗?还有其他方法吗?

我希望能够,例如,让一个对象使用一个消息队列,其名称作为参数传递给它的一个成员函数。

谢谢。

最佳答案

这个怎么样:

class QueueManager
{
boost::scoped_ptr<message_queue> mq;

// ctor
QueueManager(string msgqname)
{
mq.reset(new message_queue(create_only, msgqname, 100, sizeof(Data));
}
};

只是让您知道至少可以将一些参数传递给类构造函数。由于消息队列底层使用的是共享内存,我想大部分参数在构建之后是不能改变的。

关于c++ - Boost message_queue : just the constructor lets me configure it, 无其他成员函数可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com