如何方便地初始化函数指针数组


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

我们如何填充指针0。。。99而不把它们全部打出来?期望答案涉及std::integer_sequence解包,但阅读包扩展并不能明确如何以这种方式进行扩展。在C++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;
}

你可以这样写:

template<std::size_t ... I>
constexpr auto generate_fs(std::index_sequence<I...>) {
return std::array { &f<I> ... };
}
int main() {
constexpr std::array<void(*)(int), 100> f_pointers = [] { 
return generate_fs(std::make_index_sequence<100>{}); 
}();
}

这是一个演示。

最新更新