首页 > 后端开发 > C++ > 回调如何增强 C 语言的灵活性和定制性?

回调如何增强 C 语言的灵活性和定制性?

Mary-Kate Olsen
发布: 2024-12-29 01:41:11
原创
653 人浏览过

How Do Callbacks Enhance Flexibility and Customization in C  ?

C 中的回调

回调是作为参数传递给函数或类的 可调用 对象,允许根据特定回调自定义行为

使用回调的原因:

  • 编写可以与回调提供的不同逻辑配合使用的通用代码
  • 通知调用者某些事件,在运行时提供灵活性
  • 在运行期间启用动态行为运行时

C 11 中的可调用对象:

  • 函数指针(包括指向成员函数的指针)
  • std::function 对象
  • Lambda 表达式
  • 绑定表达式
  • 函数对象(具有重载函数调用operator()的类)

编写函数指针:

int (*)(int); // Function pointer type taking one int argument, returning int
int (* foo_p)(int) = &foo; // Initialize pointer to function foo
登录后复制

称呼符号:

int foobar(int x, int (*moo)(int));
foobar(a, &foo); // Call foobar with pointer to foo as callback
登录后复制

std::function 对象:

std::function<int(int)> stdf_foo = &amp;foo;
登录后复制

调用符号:

int stdf_foobar(int x, std::function<int(int)> moo);
stdf_foobar(a, stdf_foo);
登录后复制

拉姆达表达式:

stdf_foobar(a, [c](int x) -> int { return 7+c*x; });
登录后复制

std::bind 表达式:

int nine_x_and_y (int x, int y) { return 9*x + y; }
stdf_foobar(a, std::bind(nine_x_and_y, _1, 3));
登录后复制

模板化回调:

template<class R, class T>
void stdf_transform_every_int_templ(int * v,
  unsigned const n, std::function<R(T)> fp) {...}
登录后复制

致电符号:

stdf_transform_every_int_templ<int,int&amp;>(&amp;a[0], 5, &amp;woof);
登录后复制

以上是回调如何增强 C 语言的灵活性和定制性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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