我在将具有非平凡构造函数的对象放入映射值时遇到问题。它与this问题几乎相同,但是没有可变部分。例如,考虑具有两个参数构造函数的简单产品类型foo
。
struct foo {
std::string x;
float y;
foo(std::string _x, float _y) : x(_x), y(_y) { }
~foo() { std::cerr << "foo destructing\n"; }
};
以下说明了问题。
void test() {
{ // scope
std::map<int,foo> m;
// m.emplace(44,"bar",3.14); // this is sort of what I want
m.emplace(44, foo("bar",3.14f)); // works, but copys
std::cout << "exiting scope\n";
}
std::cout << "exited scope\n";
}
对此有简单的解决方法吗?