ゆとりーなの日記

日記的な事を書いて行くと思はれる

std::arrayは構造体の初期化が無理なのかと思ったらいけた

std::arrayを使ってて気づきました。これって実は構造体の初期化ができないのではないかという疑惑です。
とある構造体

struct Hoge {
    int hoge:
    int hogehoge;
    int hogehogehoge;
};

があったとき、組み込み配列では次のように初期化ができます。

int main() {
    const Hoge kHogeArray[4] = {
        {0, 0, 0},
        {1, 1, 1},
        {2, 2, 2}
    };
    return 0;
}

こいつをstd::arrayに置き換えるには、次のような感じにすればよさそうに思えます。

int main() {
    const std::array<Hoge, 4> kHogeArray = {
        {0, 0, 0},
        {1, 1, 1},
        {2, 2, 2}
    }; // エラー
    return 0;
}

ところがこれだとVC++2010が初期化子の数が多すぎますと文句言ってきます。どうしたものかと考えていて、何となく{}を追加してみたらなんかいけました。

int main() {
    const std::array<Hoge, 4> kHogeArray = {
        {
            {0, 0, 0},
            {1, 1, 1},
            {2, 2, 2}
        }
    };
    return 0;
}

これで構造体を入れたstd::arrayの初期化ができます。constが付けられるようになりました。