如何将C++旧式函数指针数组改写为std::array形式?
用std::array存储函数指针的实现方法
当然可以,直接把原生数组对应的函数指针类型作为std::array的模板参数即可,完全不需要改用std::function。
首先,先明确你的原生数组声明对应的函数指针类型:接受int参数、返回bool的函数指针。我们可以先给这个类型起个别名,让代码更易读:
using FuncPtr = bool (*)(int);
然后用这个别名声明std::array:
std::array<FuncPtr, 2> arr = {foo, foo2};
如果不想用类型别名,也可以直接把函数指针类型写进模板参数,只是语法稍显繁琐:
std::array<bool (*)(int), 2> arr = {foo, foo2};
两种写法都和原生数组bool (*arr[2])(int) = { foo, foo2 };功能完全一致,还保留了函数指针的轻量特性,不会有std::function带来的额外运行开销。
附上完整示例代码:
#include <array> #include <iostream> bool foo(int x) { return x > 0; } bool foo2(int x) { return x < 0; } int main() { using FuncPtr = bool (*)(int); std::array<FuncPtr, 2> arr = {foo, foo2}; std::cout << std::boolalpha; std::cout << arr[0](5) << std::endl; // 输出true std::cout << arr[1](5) << std::endl; // 输出false return 0; }
内容的提问来源于 %Primitive sought `P Rough世间一个g �( manslaughter
内容的提问来源于stack exchange,提问作者rare77
相关产品推荐
相关产品推荐

