应该使用什么优雅的方法回调设计?

时间:2010-05-04 15:28:14

标签: c++ design-patterns methods callback c++11

我很惊讶这个问题之前没有问到过(好吧,至少我找不到它)。

你有没有在C ++中设计一个方法回调模式(类似于“指针”),如果是这样,你是怎么做到的?

我知道一个方法只是一个常规函数,带有一些隐藏的this参数作为上下文,我有一个非常简单的设计。但是,由于事情通常比它们看起来更复杂,我想知道我们的C ++ gurus 将如何实现这一点,最好以优雅和标准方式实现。

欢迎所有建议!

3 个答案:

答案 0 :(得分:9)

boost::function用于单个回调,boost::signalboost::signals2,当可以注册多个回调时,使用boost::bind绑定成员方法(或以不同方式调整签名) )。

如果您可以访问具有C ++ 0x / C ++ 11支持的编译器,则它可能具有std :: function和std :: bind,它们是boost :: function和boost :: bind <的新标准版本/ p>

答案 1 :(得分:2)

boost::function(与boost::bind一起)不够优雅吗?这也将使您远离讨厌(但符合标准)的实现细节,例如指向大于void*的成员的指针,这是旧版Windows CE系统的回调库中的问题。我宁愿使用一个着名的图书馆而不是自己处理这些问题。

答案 2 :(得分:2)

使用C ++对回调进行了很好的介绍,您可以找到here。当boost不是一个选项时,我用这篇论文作为实现的基础。