N3059で、ペア(およびタプル)の区分的構造の説明を見つけました(これは新しい標準に含まれています)。
しかし、いつ使うべきかわかりません。emplaceエンティティとコピー不可能なエンティティについての議論を見つけましたが、試してみたところ、パフォーマンス上の利点が必要な場合 や、パフォーマンス上のメリットが見られる場合を作成できませんでしたpiecewiese_construct
。
例。コピーできないクラスが必要だと思いましたが、movebale(転送に必要):
struct NoCopy {
NoCopy(int, int) {};
NoCopy(const NoCopy&) = delete; // no copy
NoCopy& operator=(const NoCopy&) = delete; // no assign
NoCopy(NoCopy&&) {}; // please move
NoCopy& operator=(NoCopy&&) {}; // please move-assign
};
次に、標準のペア構築が失敗することを予想しました。
pair<NoCopy,NoCopy> x{ NoCopy{1,2}, NoCopy{2,3} }; // fine!
しかし、そうではありませんでした。実際、これはとにかく私が期待していたことです。なぜなら、stdlibのどこにでもコピーするのではなく、「ものを移動する」ということです。
したがって、私がこれを行うべきだった理由はわかりません。
pair<NoCopy,NoCopy> y(
piecewise_construct,
forward_as_tuple(1,2),
forward_as_tuple(2,3)
); // also fine
- それで、ユースケースは何ですか?
- いつ、どのように使用し
piecewise_construct
ますか?