オブジェクトのインプレース構築を行うために、いくつかの引数を転送しようとしています。連想コンテナでのemplaceの使用の背後にある論理的根拠を完全に理解していないか、間違った方法で使用/考えているだけかもしれません。誰かが使用するためのコードスニペットを共有できれば素晴らしいと思います。
mapのような連想コンテナは常に種類pair()のオブジェクトを格納し、emplace関数は、引数を転送することによって、格納されているオブジェクトのコンストラクター(マップの場合は常にペア)を呼び出すことを示します。では、関数に可変個引数のシグネチャがある場合でも、2つの引数(key、value)を提供するように制限されているだけですか?
次のような引数を渡す前に、ブーストコンテナでemplaceを使用した場合:emplace(arg1、arg2、arg3、arg4)//ここで、arg2、arg3、arg4はオブジェクトの構築に使用され、arg1がキーでした。
新しいgcc-4.6とc++11でコンパイルすると、これは壊れますが、今は次のようなことをしなければなりません:emplace(arg1、myobj(arg2、arg3、arg4)); //同じコードを機能させる;
それで、新しい場所はブーストのような区分的構造をしませんか?また、ペアはコンストラクターに対して常に2つの引数を受け入れるため、マップに提供する引数は2つだけに制限されていますか。