首页 > 后端开发 > C++ > 回调如何增强 C 代码功能?

回调如何增强 C 代码功能?

DDD
发布: 2024-12-10 18:22:12
原创
504 人浏览过

How Can Callbacks Enhance C   Code Functionality?

C 中的回调

回调是函数或类接受的可调用对象,用于根据回调自定义当前逻辑。

何时使用回调:

  • 编写独立于被调用函数逻辑的通用代码。
  • 启用动态运行时行为(例如,更改游戏中的按钮功能)。
  • 通知来电者具体情况

C 11 中的可调用:

回调可以采取各种形式,所有形式都被视为“可调用”:

  • 函数指针
  • std::function对象
  • Lambda 表达式
  • 绑定表达式
  • 函数对象(具有重载函数调用运算符的类)

回调表示法:

1。函数指针

  • typedef return_type (*f_int_t) (int);
  • int (* foo_p)(int) = &foo;
  • int foob​​ar(int x,int (*moo)(int));
  • int foobar (int x, f_int_t moo);

2.指向成员函数的指针

  • typedef int (C::* f_C_int_t) (int x);
  • int (C::* C_foo_p)(int) = & C::foo;
  • int C_foobar (int x, C const &c, int (C::*moo)(int));
  • int C_foobar (int x, C const &c, f_C_int_t moo);

3. std::function 对象

  • std::function stdf_foo = &foo;
  • int stdf_foobar (int x, std::function moo);

4.模板化回调

这允许更通用的代码。

  • 模板 void stdf_transform_every_int_templ(int * v, unsigned const n, std::function fp);
  • 模板; void transform_every_int_templ(int * v, unsigned const n, F f);

兼容的回调类型:

  • 函数指针: 功能指针
  • std::function 对象: 函数指针、lambda 表达式、绑定表达式、函数对象
  • 模板化回调: 任何可调用类型(例如、lambda 表达式、绑定表达式、函数对象)

示例:

  • 函数指针示例:

    void tranform_every_int(int * v, unsigned n, int (*fp)(int));
    int double_int(int x) { return 2*x; }
    int square_int(int x) { return x*x; }
    登录后复制
  • std::function 对象示例:

    void stdf_tranform_every_int(int * v, unsigned n, std::function<int(int)> fp);
    int a[5] = {1, 2, 3, 4, 5};
    stdf_tranform_every_int(&amp;a[0], 5, Meow{8});
    登录后复制
  • 模板化回调示例:

    int nine_x_and_y (int x, int y) { return 9*x + y; }
    using std::placeholders::_1;
    stdf_transform_every_int_templ(&amp;a[0], 5, std::bind(nine_x_and_y, _1, 4));
    登录后复制

以上是回调如何增强 C 代码功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板