gpt4 book ai didi

c++ - 在关联容器中使用 emplace(args&& ...)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:31 24 4
gpt4 key购买 nike

我正试图提出一些论据来进行对象的就地构造。我不太明白在关联容器中使用 emplace 背后的基本原理,或者我可能只是以错误的方式使用/思考。如果有人可以共享代码片段以供使用,那就太好了。

像 map 这样的关联容器总是存储一个 pair() 类型的对象,而 emplace 函数表示它将通过转发参数调用存储对象的构造函数(在 map 的情况下 for 总是 pair )。那么,即使函数具有可变参数签名,我们是否也只能提供两个参数(键、值)?

当我在传递参数之前将 emplace 与 boost 容器一起使用时:emplace(arg1, arg2,arg3,arg4)//其中 arg2,arg3,arg4 用于构造对象,arg 1 是键。

当使用新的 gcc-4.6 和 c++11 编译时,这会中断但现在我必须做类似的事情:放置(arg1,myobj(arg2,arg3,arg4));//使相同的代码工作;

所以新的 emplace 不像 boost 那样做任何分段构造?我是否仅限于向 maps 提供 2 个参数,因为 pairs 总是会为其构造函数接受两个参数。

最佳答案

So the new emplace doesn't do any piece wise construction like boost ?

您所说的“分段构造”不是标准所指的分段构造,它是:

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 通过使用委托(delegate)构造函数修复了此要求,GCC 4.6 不支持)

关于c++ - 在关联容器中使用 emplace(args&& ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689482/

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