我尝试做以下事情:
使用boost :: interprocess库在共享内存中创建一个“大”数组(1 000 000 +对象)
我的代码包含以下内容:
managed_shared_memory testarray(create_only, "Test", 45000000);
typedef std::pair<SingleField, uint32_t> TestType;
TestType * test = testarray.construct<TestType>("TestArray")[45000000];
我的问题是:我如何弄清楚这个提升函数的返回类型是什么?
如果我使用以下内容执行相同操作:SingleField而不是“:: pair它似乎不起作用,但我不需要第二个容器,我只需要一个,但只有一个它不起作用!” / p>
日食的输出对我来说有点太神秘了。因为我使用boost我已经多次停止因为这样的问题,有没有一种简单的方法来弄清楚函数将返回什么“类型”? (我来自Java所以我习惯了一些“简单”的定义,其中说对象x)我真的很高兴如果我能弄清楚特定函数返回的类型,我为自己编写的所有函数都是很简单但是这个库我似乎有问题。
第二个问题:为什么这些示例总是带有“类型”对,是否为库前提条件?
- &GT;我尝试过使用#include,Eclipse告诉我它的std :: pair问题是为什么它是T *?这是起始段地址吗?
感谢您的时间和答案。
Eclipse输出:
Multiple markers at this line
- unused variable test
- cannot convert const
boost::interprocess::detail::named_proxy<boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, Field, false> to
SharedMemoryInitializer::Create()::TestType* in initialization
我已经多次阅读过boost库手册,也许我会查看错误的网站或页面,如果您提供我想念的信息,我会很高兴。
答案 0 :(得分:0)
从我的角度来看,您的代码存在两个主要问题:
您似乎正在分配45000000个TestType
类型的对象,这可能不是您想要的(除非TestType
每个实例只需要一个字节):
TestType * test = testarray.construct<TestType>("TestArray")[45000000];
根据文档(*),您必须为构造函数调用提供括号(您使用的是第二个版本):
TestType * test = testarray.construct<TestType>("TestArray")[45000000]
的 ()
强> ;
我假设TestType
有一个无参数的构造函数。