网站开发实训内容,o2o网站建设行情,网站开发所需要的的环境,做网站服务器多钱C笔记之通用多态函数包装器std::function
code review! 文章目录 C笔记之通用多态函数包装器std::function1.存储自由函数#xff0c;lambda#xff0c;std::bind 调用的结果2.存储到成员的调用3.存储到函数对象四.基本语法五.使用std::function定义函数对象六.使用std::fu…C笔记之通用多态函数包装器std::function
code review! 文章目录 C笔记之通用多态函数包装器std::function1.存储自由函数lambdastd::bind 调用的结果2.存储到成员的调用3.存储到函数对象四.基本语法五.使用std::function定义函数对象六.使用std::function结合Lambda表达式定义函数对象七.使用std::function实现回调机制——略有专门新开笔记介绍。 1.存储自由函数lambdastd::bind 调用的结果 代码
#include functional
#include iostreamvoid print_num(int i) {std::cout i \n;
}int main() {std::cout 存储自由函数---1 std::endl;std::functionvoid(int) f_display print_num;f_display(-9);std::cout 存储 lambda--2 std::endl;std::functionvoid() f_display_42 []() { print_num(42); };f_display_42();std::cout 存储到 std::bind 调用的结果--3 std::endl;std::functionvoid() f_display_31337 std::bind(print_num, 31337);f_display_31337();
}运行: 存储自由函数—1 -9 存储 lambda–2 42 存储到 std::bind 调用的结果–3 31337
2.存储到成员的调用 代码
#include functional
#include iostreamstruct Foo {Foo(int num) : num_(num) {}void print_add(int i) const { std::cout num_ i \n; }int num_;
};int main() {const Foo foo(314159);foo.print_add(1);std::cout 存储到成员函数的调用---1 std::endl;std::functionvoid(const Foo , int) f_add_display Foo::print_add;f_add_display(foo, 1);f_add_display(314159, 1);std::cout 存储到数据成员访问器的调用---2 std::endl;std::functionint(Foo const ) f_num Foo::num_;std::cout num_: f_num(foo) \n;std::cout 存储到成员函数及对象的调用---3 std::endl;using std::placeholders::_1;std::functionvoid(int) f_add_display2 std::bind(Foo::print_add, foo, _1);f_add_display2(2);
}运行: 314160 存储到成员函数的调用—1 314160 314160 存储到数据成员访问器的调用—2 num_: 314159 存储到成员函数及对象的调用—3 314161
3.存储到函数对象 #include functional
#include iostreamstruct PrintNum {void operator()(int i) const {std::cout i \n;}
};int main() {// 存储到函数对象的调用std::functionvoid(int) f_display_obj PrintNum();f_display_obj(18);auto factorial [](int n) {// 存储 lambda 对象以模拟“递归 lambda ”注意额外开销std::functionint(int) fac [](int n) { return (n 2) ? 1 : n * fac(n - 1); };// note that auto fac [](int n){...}; does not work in recursive callsreturn fac(n);};for (int i{5}; i ! 8; i) {std::cout i ! factorial(i) ; ;}
}代码: 18 5! 120; 6! 720; 7! 5040;
四.基本语法 五.使用std::function定义函数对象 六.使用std::function结合Lambda表达式定义函数对象 七.使用std::function实现回调机制——略有专门新开笔记介绍。