あなたのコンストラクタはOKです。考えられる問題はunique_ptr
、コンストラクターにそれらを提供するときに 2 つの を移動していないことです。
#include <memory>
#include <string>
using namespace std;
struct KV{
unique_ptr<string> k, v;
KV(){}
KV (unique_ptr<string> k_,unique_ptr<string> v_):k(move(k_)),v(move(v_)){}
};
int main()
{
unique_ptr<string> p1(new string());
unique_ptr<string> p2(new string());
// KV v(p1, p2); // ERROR!
KV kv(move(p1), move(p2)); // OK
vector<KV> v;
v.emplace_back(move(p1), move(p2)); // OK
}
アップデート:
VS2012 が出荷されたとき、VC11 は可変個引数テンプレートをサポートしていませんでした。の正しい実装は可変長であるemplace_back()
べきですが、MS はダミーのものを提供しました。CTP が出荷されたとき、可変個引数テンプレートをサポートするようにコンパイラのみが更新されましたが、STL は更新されていません。そのため、引き続きエラーが発生します。
製品の次のリリースが出荷されるのを待つ以外に、コンパイラを変更できない場合、これについて行うことはあまりありません。当面の間は使用を避け、代わりにemplace_back()
使用してください。push_back()