我想转发一些参数做对象的就地建设。 我不完全得到布设的关联容器的使用背后的基本原理或可我只是用/以错误的方式思考。 这将是巨大的,如果有人可以使用共享的代码片段。
像地图关联容器总是存储样对(的一个目的),而布设功能说会通过转发参数来调用所存储的对象的构造(其为总是在配对的地图的情况下)。 那么,我们只限于提供两个参数(键,值),即使该函数具有可变参数的签名?
当我用升压容器布设之前,我可以传递参数,如:布设(ARG1,ARG2,ARG3,ARG4)// ARG2,ARG3,ARG4被用于构造对象和Arg 1是关键在哪里。
新的gcc-4.6和C ++ 11,这打破了编译时但现在我必须做一些事情,如:布设(ARG1,MyObj中(ARG2,ARG3,ARG4)); //也作出了同样的代码工作;
因此,新的布设没有做任何一件明智的建筑像升压? 而且我是受限制的,只提供2个参数地图,因为对将始终接受两个参数对它们的构造。
因此,新的布设没有做任何一件明智的建筑像升压?
您指的是“一件明智的建设”什么是不是标准指的是分段建设,这是什么:
m.emplace(std::piecewise_construct,
std::forward_as_tuple<A1>(arg1),
std::forward_as_tuple<A2,A3,A4>(arg2, arg3, arg4));
这不正是你想要什么,转发args来元组的第一和第二pair
成员(但要注意,使用GCC 4.6,这需要为每一个参数类型可访问的拷贝构造函数,见http://gcc.gnu.org/bugzilla /show_bug.cgi?id=51183 -这个要求是通过使用委托的构造固定GCC 4.7,而不是由GCC 4.6支持)
这确实是在标准中的缺陷,它在长度被寻址N3178 。
报价,
构建VALUE_TYPE的目的的唯一方式是提供一种用于键和值,一对或piecewise_construct_t后跟两个元组提供恰好两个参数。 最初布设()的提案将允许您指定一个关键值,后跟任意数量的构造论据价值。 当我们删除了可变参数的构造函数配对,这才走了
...
现状是,如果你想构造一个对象使用piecewise_construct_t。
它被封闭,“NAD”