我正在尝试转发一些论点来进行对象的就地构造。我不太明白在关联容器中使用 emplace 背后的基本原理,或者我可能只是以错误的方式使用/思考。如果有人可以共享代码片段以供使用,那就太好了。
像 map 这样的关联容器总是存储一个类型为 pair() 的对象,并且 emplace 函数表示它将通过转发参数来调用存储的对象的构造函数(对于映射,它总是 pair )。那么即使函数具有可变参数签名,我们是否只限于提供两个参数(键、值)?
当我将 emplace 与 boost 容器一起使用之前,我可以传递如下参数:emplace(arg1, arg2,arg3,arg4) // 其中 arg2,arg3,arg4 用于构造对象,而 arg 1 是关键。
当使用新的 gcc-4.6 和 c++11 编译时,这会中断但现在我必须做类似的事情: emplace (arg1 , myobj(arg2,arg3,arg4)); // 使相同的代码工作;
所以新的 emplace 没有像 boost 这样的分段构造?我是否仅限于为 maps 提供 2 个参数,因为对将始终为其构造函数接受两个参数。