使用设计模式时“指向函数的指针”的优点

时间:2012-07-02 07:38:06

标签: c++ design-patterns pointers

在C ++中,我们可以指向函数。这样我们就可以将“指向函数的指针”作为参数传递给另一个函数。当我们考虑设计模式时,是否有任何特定的设计模式特别利用“指向函数的指针”?

3 个答案:

答案 0 :(得分:8)

任何利用回调的设计模式;例如访客,策略和观察者。请注意,在C ++中,函数也可供您使用,并且通常是STL首选。

答案 1 :(得分:2)

使用指向函数的指针可以实现的大多数事情,您可以使用具有更好优化的仿函数或使用虚拟方法实现更好的OO设计。但是,指向函数的指针是C代码和C ++代码相互连接的狭窄用例的要求。 OO设计模式仍然允许C代码参与模式。并且,某些C接口只接受函数指针,因此使用这些API的C ++代码必须传递一个。

函数指针通常用作调用在某种订阅/发布模型(事件通知)中注册的某些代码的方法。例如,它可以用于状态模式中的handle()方法。

但是,它也可以用作一个简单的钩子来获取在特定框架内运行的代码。例如,pthread_create接受一个在线程启动后调用的函数指针。

答案 2 :(得分:1)

我通常会在需要为某些情况定制某个功能的某个部分时看到这一点。允许相同的函数承担多种用途,这在C ++的for_each函数中得到证明,该函数通过迭代并向其应用函数。它实际上只允许更多可重用的代码。

在相关的说明中,C ++标准库对其容器类使用了类似的设置。

例如:

template < class T, class Container = deque<T> > class stack;

是堆栈类的decleration。正如您所看到的,它为其底层数据结构提供了一个可配置参数,这类似于函数指针的使用方式。

编辑:或其他海报提到的回调。