回调函数的应用

Vik*_*ram 0 c c++ polymorphism callback

我想知道callback functions实际使用的位置?

有没有办法在C/C++中实现回调函数(除了使用函数指针)?

请解释以下行 -

" A callback can be used as a simpler alternative to polymorphism and generic programming"

谢谢

Mik*_*our 6

我想知道实际使用回调函数的位置?

两个最常见的用途是允许用户实现算法的一部分(例如,传递给C qsort和C++ 的比较器std::sort允许对任意类型进行排序),并接收外部事件的通知(例如,在许多异步用户中)接口和通信库,例如Boost.Asio).

有没有办法在C/C++中实现回调函数(除了使用函数指针)?

没有C/C++这样的语言.

在C中,唯一合理的机制是函数指针.

在C++中有很多种方法.对于那些喜欢OOP的人来说,一种常见的方法是定义一个抽象接口类.在那里声明的虚函数充当回调,并且可以调用派生实现类中定义的任意代码.

那些喜欢泛型和函数式编程的人会改为定义一个重载的类operator()- 通常称为"functor"或"function object".这样的东西可以像函数一样调用,但也可以随身携带状态.此模式在整个标准库中广泛使用,例如为容器和自定义比较器提供自定义分配器以进行排序算法.

这两种方法都可以更方便地为回调提供额外的信息 - 可能是一个调用成员函数的对象,或一个用于比较函数参数的值.在C中,任何这样的"用户"状态都必须通过回调中的额外参数传递 - 如果回调机制的设计者忽略了包含它,那么使用它可能非常棘手.

C++ 11提供了一些处理仿函数的方便的新方法.std::function是一种多态类型,可以表示任何类似函数的东西,如果你不想模板化函数类型,它是一个很好的类型用于回调.std::bind和lambda表达式是从一些任意代码片段定义仿函数的简单方法.

回调可以用作多态和泛型编程的简单替代

脱离背景,这没有多大意义.我想这意味着,如果你使用函数指针进行回调,则不需要定义任何抽象接口或仿函数.如果他们认为多态性和通用性很复杂,有些人可能会认为这更简单; 但它也带来了它自己的复杂性,因为没有类型安全的方法将任意用户数据传递给回调,就像使用C++方法一样.