2

从 的文档std::array,我们发现它可以如下初始化(使用聚合初始化):

struct S {
    S(): arr{0,1} { }
    std::array<int,2> arr;
};

无论如何,在这种情况下会出现一个问题:

template<int N>
struct S {
    S(): arr{/*??*/} { }
    std::array<int,N> arr;
};

如何在构造时初始化数组s(例如,值 from 0toN-1或使用constexpred 函数向其传递索引)?

4

1 回答 1

4

看看被大量利用不足的力量std::iota

template <int N>
struct S {
    S() {
        std::iota(arr.begin(), arr.end(), 0);
    }

    std::array<int, N> arr;
};

虽然如果你真的想使用聚合初始化,总有std::integer_sequence(需要 C++14,但在 SO 上有很多 C++11 解决方案):

template <int N>
struct S {
    S() : S(std::make_integer_sequence<int, N>{}) {}

    std::array<int, N> arr;
private:
    template <int... Is>
    S(std::integer_sequence<int, Is...> )
        : arr{Is...}
    { }
};
于 2016-03-26T18:46:17.330 回答