3

と呼ばれるクラスがありgroup、その内部にいくつかの基本クラスを保持し、std::unique_ptrs (ポリモーフィズム) に保持します。順序は重要ではなく、一部の要素がそれらの間で等しいかどうかも重要ではありません。メンバー宣言のようにstd::vectorフラグを立てるのが理想的です。const

group設計の一環として、次のように、オブジェクトに収まるすべての要素を に渡したいと思いinitializer_listます。

class base;

class derived1 : base;
class derived2 : base;
class derived3 : base;

group my_object({ new derived1() , new derived2() , new derived3() });

しかし、私は次のことに問題があります。

  • groupクラス内のベクトルはstd::unique_ptr、オブジェクトではなくで構成されます。
  • s は1 つの typestd::initializer_listのオブジェクトのみを保持できるため、その型は基本クラスへのポインターでなければなりません。

これらすべてを考慮して、どのように実装すればよいでしょうか? クラスのベクトルに保持されている要素はgroup変更されることが想定されていないため、コンストラクターの初期化リストで初期化する方がはるかに効率的です。ただし、 s はコピー可能ではなく、生のポインターで構成されたsからaをstd::unique_ptr作成する方法がわかりません。vectorunique_ptr<base_class>initializer_list

4

1 に答える 1