c++ - 使用模板进行序列数组初始化

标签 c++ templates c++11 metaprogramming

我想用 int 序列初始化一个数组来自 0N - 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 * .我怎样才能做到这一点 ?如何“连接”这些值?

最佳答案

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

#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;
}

关于c++ - 使用模板进行序列数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37297359/

相关文章:

c++ - 如何在 C++ 中正确返回模板化对象?

python - Django:标签中的For循环显示不同的信息

c++ - `void f(A<0>, tuple<T *...>)` 不是比 `void f(A<I>, tuple<T *...>)` 更专业吗?

c++ - 我应该为 Visual C++ 游戏开发项目使用哪个项目模板?

c++ - STL 函数/Boost 函数类型定义错误

c++ - Objective-C 是否有 C++11 右值引用和 move 语义等价物或如何实现它?

c++ - 在 std::vector 中查找迭代器

c++ - 为什么 C++ 容器不实现接口(interface)

c++ - 无法转换此指针

c++ - 模板多重定义问题