用模板进行序列数组初始化

时间:2016-05-18 10:48:32

标签: c++ templates c++11 metaprogramming

我想初始化一个数组int0N - 1

#include <array>
#include <iostream>

template<unsigned N>
struct XArray
{
    static constexpr int array[N] = {XArray<N - 1>::array, N - 1};
};

template<>
struct XArray<1>
{
    static constexpr int array[1] = {0};
};


int main(void)
{
    std::array<int, 10> const   a{XArray<10>::array};

    for (int const & i : a)
        std::cout << i << "\n";
    return 0;
}

我试过了,但它不起作用,因为我的结构中的XArray<N - 1>::array必须是int,而不是int *。我怎样才能做到这一点 ?如何“连接”这些值?

1 个答案:

答案 0 :(得分:4)

我不确定这是否符合您的要求。

#include <array>
#include <iostream>

template <size_t ...I>
constexpr auto init(std::index_sequence<I...>) {
    return std::array<size_t, sizeof...(I)>{I...};
}

int main(void)
{
    std::array<size_t, 10> a = init(std::make_index_sequence<10>());

    for (int const & i : a)
        std::cout << i << "\n";
    return 0;
}