尝试使用类construct<T>()
的方法时收到一个奇怪的编译错误boost::interprocess::managed_shared_memory
。我在 1.48 版本中使用 Boost 库,在 4.6.3 版本中使用 GCC。
问题是当我创建一个managed_shared_memory object
(它不是结构的成员)然后我尝试使用它的construct<T>()
方法构造任何对象时,编译成功:
#include <boost/interprocess/managed_shared_memory.hpp>
namespace proc = boost::interprocess;
template <typename _T>
void TFunc() {
proc::managed_shared_memory mem;
mem = proc::managed_shared_memory(proc::create_only, "mem1", 1024);
int* ob1 = mem.construct<int>("i1") ();
}
虽然,当managed_shared_memory
对象在结构中定义然后创建时,construct<T>()
方法用法的编译失败:
#include <boost/interprocess/managed_shared_memory.hpp>
namespace proc = boost::interprocess;
template <typename _T>
void TFunc() {
struct MemoryHandler {
proc::managed_shared_memory mem;
} handler;
handler.mem = proc::managed_shared_memory(proc::create_only, "mem2", 1024);
int* ob2 = handler.mem.construct<int>("i2") (); // failure
}
出现以下 GCC 错误,指向construct
使用方法的行:
error: expected primary-expression before 'int'
error: expected ',' or ';' before 'int'
不幸的是,我没有针对其他版本的 Boost 和 GCC 测试它,所以我不知道它是 Boost/GCC 的错误还是功能。
有没有人遇到过类似的错误或知道可能是什么原因?