Boost message_queue:只有构造函数允许我配置它,没有其他成员函数可用
Boost message_queue: just the constructor lets me configure it, no other member functions available
这是一个经典的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));
}
};
只是给你一个概念,至少一些参数可以传递给类构造函数。由于消息队列在底层使用共享内存,所以我认为大多数参数在构建后都不能更改。
相关文章:
- 只对向量中的一个类成员进行排序,其他成员保持不变
- 使用其他成员初始化结构的成员?
- 对 Eclipse 项目库的更改将还原给团队的其他成员
- 其他成员函数的通用"成员函数"包装器?
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 将成员函数作为参数传递给其他成员函数 (C++ 11 <function>)
- 使用类的其他成员变量定义类的成员变量数组
- 不太明白 & 运算符的地址在这个结构中做什么,以及它如何能够访问其他成员变量
- 当并行线程访问同一数据结构的其他成员时,正确的方法可以在Visual Studio上的OpenMP上并行循环
- 当 lambda 函数必须访问其他成员时,如何将该函数分配给结构成员
- 如何在类的其他成员函数中重用传递的引用?
- 如果其他成员跟在结构成员的末尾,则写入/读取该末尾
- 在同一类的其他成员函数的定义中调用类成员函数
- std::函数成员是否可以访问其他成员
- 安全地移动在访问其他成员的成员线程中运行 lambda 的对象
- 通过组合的其他成员访问'has-a'关系中的成员
- 以下4种样式调用其他成员方法有什么区别?
- 成员变量是否可用于初始化列表中的其他成员
- 将非成员变量数据传递给构造函数时,如何保存它们并在其他成员函数中使用?C++
- 如何从内部结构中引用类中的其他成员