首页 > 解决方案 > 如何方便地初始化函数指针数组?

问题描述

template<int I>;
void f(int value) { }

constexpr std::array<void(*)(int), 100> f_pointers = { &f<0>, &f<1>, &f<2>, ... &f<99> };

我们如何填写 f_pointers 0 ... 99 而无需全部输入?期待答案涉及std::integer_sequence拆包,但阅读包扩展并不能说明如何以这种方式扩展。使用 C++20 工作。

标签: c++templatesvariadic-templatesc++20

解决方案


#include <array>
#include <utility>


template<int N>
void f(){}

template<int... Indices>
constexpr auto create_functions(std::integer_sequence<int, Indices...>)
{
    return std::array {f<Indices>...};
}

constexpr auto arr = create_functions(std::make_integer_sequence<int, 100>{});

int main()
{
    return 0;
}

推荐阅读