use*_*156 4 c++ stdmap variadic-templates c++11 std-pair
我试图转发一些参数来进行对象的原位构造.我不太了解在关联容器中使用emplace背后的基本原理,或者我可能只是以错误的方式使用/思考.如果有人可以共享代码片段以供使用,那将会很棒.
像map这样的关联容器总是存储一个kind对()的对象,而emplace函数表示它会通过转发参数来调用存储的对象的构造函数(对于map的情况总是成对).那么即使函数具有可变参数签名,我们是否仅限于提供两个参数(键,值)?
当我使用增强容器的emplace之前我可以传递如下的参数:emplace(arg1,arg2,arg3,arg4)//其中arg2,arg3,arg4用于构造对象而arg 1是关键.
当用新的gcc-4.6和c ++ 11编译时,这会打破但现在我必须做类似的事情:emplace(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));
Run Code Online (Sandbox Code Playgroud)
这完全符合您的要求,将args的元组转发给第一个和第二个pair成员(但请注意,对于GCC 4.6,这需要为每个参数类型提供可访问的复制构造函数,请参阅http://gcc.gnu.org/bugzilla/ show_bug.cgi?id = 51183 - 通过使用委托构造函数对GCC 4.7修复此要求,GCC 4.6不支持)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |