6

の値型である必要がある特定の型に対して、移動コンストラクター(コピーコンストラクターなし)を実装したいと思いますboost::unordered_map。このタイプを呼びましょうComposite

Composite次の署名があります。

struct Base
{
  Base(..stuff, no default ctor) : initialization list {}
  Base(Base&& other) : initialization list {} 
}

struct Composite
{
  Base member;
  Composite(..stuff, no default ctor) : member(...) {}
  Composite(Composite&& other) : member(other.member) {} // <---- I want to make sure this invokes the move ctor of Base
}

これを書きたいのでboost::unordered_map< Key , Composite >、コピーコンストラクターは必要なく、移動コンストラクターを使用します。Base可能であれば、のmoveコンストラクターの初期化リストでのcopyコンストラクターを使用したくありませんComposite

これは可能ですか?

4

1 に答える 1

14

言うmember(std::move(other.member))

ゴールデンルールとして、右辺値参照で何かを取得するときはstd::move常に、内部で使用する必要があり、ユニバーサル参照(つまり、で推定されるテンプレート型&&)で何かを取得するときは常に、内部で使用する必要がありますstd::forward

于 2012-12-10T00:21:17.870 に答える