2

で基本クラスを初期化したいstd::initializer_list

struct A : public std::array<int, 4>
{
  // This constructor works fine
  A()
  : std::array<int, 4>{{ 1, 2, 3, 4 }}
  {
  }

  // THIS CONSTRUCTOR FAILS TO COMPILE
  A(std::initializer_list<int> il)
  : std::array<int, 4>{il}
  {
  }
};

2番目のコンストラクターのGCCエラーは

エラー: 配列は中かっこで囲まれた初期化子で初期化する必要があります

私が欲しいのは、このようなinitializer_listで新しいAインスタンスを初期化することです

A var{{ 1, 2, 3, 4 }}

そしてそれを基底クラスに渡します。

4

2 に答える 2

2

このクラスstd::arrayには、 を受け取るコンストラクターがありませんstd::initializer_list

あなたが持っている唯一の方法は、次のようにすることです:

#include <array>
#include <initializer_list>

struct A : public std::array<int, 4>
{
    A()
    : std::array<int, 4>{{ 1, 2, 3, 4 }}
    {
    }

    A(std::array<int, 4> il)
    : std::array<int, 4>(il)
    {
    }
};

int main ()
{
    A a ({{ 1, 2, 3, 4 }});
}
于 2014-04-13T02:01:18.903 に答える
0

array最初のctorのように「中括弧で囲まれた初期化子」で anを初期化できますがinitializer_list、2番目の as では初期化できないと言っています。initializer_list を取る配列 ctor はありません。実際、暗黙的に宣言された特別なメンバー関数を除いて、配列の ctor はありません。

于 2014-04-13T01:56:54.177 に答える