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

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

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

How Do Callbacks Enhance Flexibility and Customization in C  ?

C 中的回调

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

使用回调的原因:

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

C 11 中的可调用对象:

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

编写函数指针:

1

2

int (*)(int); // Function pointer type taking one int argument, returning int

int (* foo_p)(int) = &foo; // Initialize pointer to function foo

登录后复制

称呼符号:

1

2

int foobar(int x, int (*moo)(int));

foobar(a, &foo); // Call foobar with pointer to foo as callback

登录后复制

std::function 对象:

1

std::function<int(int)> stdf_foo = &amp;foo;

登录后复制

调用符号:

1

2

int stdf_foobar(int x, std::function<int(int)> moo);

stdf_foobar(a, stdf_foo);

登录后复制

拉姆达表达式:

1

stdf_foobar(a, [c](int x) -> int { return 7+c*x; });

登录后复制

std::bind 表达式:

1

2

int nine_x_and_y (int x, int y) { return 9*x + y; }

stdf_foobar(a, std::bind(nine_x_and_y, _1, 3));

登录后复制

模板化回调:

1

2

3

template<class R, class T>

void stdf_transform_every_int_templ(int * v,

  unsigned const n, std::function<R(T)> fp) {...}

登录后复制

致电符号:

1

stdf_transform_every_int_templ<int,int&amp;>(&amp;a[0], 5, &amp;woof);

登录后复制

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

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