std::piecewise_construct
与std::map
一起使用时,我有点困惑。例如:
std::map<std::string, std::string> m;
// uses pair's piecewise constructor
m.emplace(std::piecewise_construct,
std::forward_as_tuple("c"),
std::forward_as_tuple(10, 'c'));
在使用emplace()
时,我不确定piecewise_construct
如何知道如何处理这种类型的构造。不应该是:std::piecewise_construct(std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c'))
?如何使用逗号,我没有看到重载的逗号运算符或emplace
的特殊重载来处理分段然后变量args(如图here所示)。
答案 0 :(得分:8)
std::map::emplace
直接调用构造函数,并将参数传递给emplace
(转发它们)std::map<std::string, std::string>::value_type
类型(这是std::pair<const std::string, std::string>
的typedef。)
答案 1 :(得分:4)
map::emplace
只是将其参数转发给pair<const K, V>
的构造函数。 Pair有一个构造函数重载,它将piecewise_construct
作为第一个参数。