关于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'));
Run Code Online (Sandbox Code Playgroud)
我不emplace()知道在piecewise_construct使用时我怎么知道如何处理这种类型的结构.不应该是:std::piecewise_construct(std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c'))?它是如何只用逗号工作,我没有看到一个重载逗号操作符或特殊的超负荷emplace处理分段,然后可变ARGS(如图所示这里).
std::map::emplace直接使用传递给emplace(转发它们)的类型的参数std::map<std::string, std::string>::value_type(即typedef std::pair<const std::string, std::string>)调用构造函数.
std::pair有构造函数std::piecewise_construct_t(的类型std::piecewise_construct)
map::emplace简单地将其参数转发给 的构造函数pair<const K, V>。Pair 有一个构造函数重载,它piecewise_construct作为第一个参数。
请参阅http://en.cppreference.com/w/cpp/utility/pair/pair构造函数 #6