如何解决如何方便地初始化函数指针数组?
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
的拆包,但是阅读pack expansion并不能使这种扩展方式变得显而易见。使用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>{});
}();
}
这里是demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。