作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经盯着 Boost.Interprocess 文档看了好几个小时,但仍然无法弄清楚这一点。在文档中,他们有 an example像这样在共享内存中创建一个 vector :
//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef vector<int, ShmemAllocator> MyVector;
int main(int argc, char *argv[])
{
//Create a new segment with given name and size
managed_shared_memory segment(create_only, "MySharedMemory", 65536);
//Initialize shared memory STL-compatible allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
//Construct a vector named "MyVector" in shared memory with argument alloc_inst
MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
现在,我明白了。我遇到的问题是如何将第二个参数传递给 segment.construct()
以指定元素的数量。进程间文件给出了 construct()
的原型(prototype)
MyType *ptr = managed_memory_segment.construct<MyType>("Name") (par1, par2...);
但是当我尝试
MyVector *myvector = segment.construct<MyVector>("MyVector")(100, alloc_inst);
我遇到编译错误。
我的问题是:
segment.construct
中传递了参数par1, par2
,对象的构造函数,例如 vector
?我的理解是正在传递模板分配器参数。对吗?alloc_inst
之外,如何添加在共享内存中创建的对象的构造函数所需的另一个参数?除了关于此的简洁的 Boost 文档之外,几乎没有其他信息。
最佳答案
我在 boost 用户邮件列表和 Steven Watanabe replied 上问了同样的问题问题很简单:std::vector 没有类型为 (size, allocator) 的构造函数。查看其文档,我看到构造函数是
vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
所以正确的调用应该是
MyVector *myvector = segment.construct<MyVector>("MyVector")(100, 0, alloc_inst);
小学,亲爱的,Watson,小学!
关于c++ - 如何将参数传递给 Boost.Interprocess 中的 manage_shared_memory.construct(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437265/
我已经盯着 Boost.Interprocess 文档看了好几个小时,但仍然无法弄清楚这一点。在文档中,他们有 an example像这样在共享内存中创建一个 vector : //Define an
我是一名优秀的程序员,十分优秀!