很多C++书籍和教程都解释了如何做到这一点,但我没有看到一个给出令人信服的理由选择这样做.
我很清楚为什么在C中需要函数指针(例如,当使用一些POSIX工具时).但是,由于"this"参数,AFAIK无法向其发送成员函数.但是如果你已经在使用类和对象,为什么不使用像functor这样的面向对象的解决方案?
您将不得不使用此类函数指针的真实示例将不胜感激.
更新:我感谢大家的回答.不过,我不得不说,这些例子中没有一个确实让我相信这是一个从纯OO角度来看的有效机制......
Functor不是面向对象的先验(在C++中,术语"functor"通常表示一个结构,用于定义operator ()
具有任意参数和返回值的结构,可以用作实际函数或函数指针的语法插入替换).然而,他们面向对象的问题有很多问题,首先是可用性.它只是一大堆复杂的样板代码.为了像大多数对话框架一样有一个像样的信号框架,需要大量的继承混乱.
实例绑定函数指针在这里非常有用(.NET通过委托充分证明了这一点).
但是,C++成员函数指针仍然满足另一个需求.想象一下,例如,你想要执行一个方法的列表中有很多值,比如它print()
.一个函数指针YourType::size
有助于此处,因为它允许您编写此类代码:
std::for_each(lst.begin(), lst.end(), std::mem_fun(&YourType::print))