gpt4 book ai didi

c++ - 如何将参数传递给 Boost.Interprocess 中的 manage_shared_memory.construct()

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:06 28 4
gpt4 key购买 nike

我已经盯着 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);

我遇到编译错误。

我的问题是:

  1. 实际上谁从segment.construct 中传递了参数par1, par2,对象的构造函数,例如 vector ?我的理解是正在传递模板分配器参数。对吗?
  2. 除了 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/

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