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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-29 01:41:11636浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn