gpt4 book ai didi

c++ - 尝试使用 boost::interprocess::managed_shared_memory::construct 编译应用程序时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:37 29 4
gpt4 key购买 nike

我在尝试使用 construct<T>() 时收到一个奇怪的编译错误boost::interprocess::managed_shared_memory 的方法类(class)。我在 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 object在一个struct里面定义然后创建,编译用法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 的错误还是特性。

有没有人遇到过类似的错误或者知道可能是什么原因?

最佳答案

你没有展示一个完整的例子来证明错误,所以我只能猜测,但我怀疑失败的行在模板内并且 handler 是一个依赖类型。

要修复它,您需要告诉编译器 construct 是一个函数模板:

int* ob2 = handler.mem.template construct<int>("i2") ();
^^^^^^^^

参见 C++ Templates FAQ获取更多信息。

下次请发布一个完整的示例,以便其他人可以重现确切的问题,而不是让人们猜测。例如,这是一个显示相同错误的最小的完整示例:

#include <boost/interprocess/managed_shared_memory.hpp>

namespace proc = boost::interprocess;

struct MemoryHandler{
proc::managed_shared_memory mem;
} handler;

template<typename T> void f(T handler)
{
handler.mem = proc::managed_shared_memory(proc::create_only, "mem2", 10);
int* ob2 = handler.mem.construct<int>("i2") (); // failure
}

关于c++ - 尝试使用 boost::interprocess::managed_shared_memory::construct<T> 编译应用程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816013/

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