我很惊讶这个问题之前没有问到过(好吧,至少我找不到它)。
你有没有在C ++中设计一个方法回调模式(类似于“指针”),如果是这样,你是怎么做到的?
我知道一个方法只是一个常规函数,带有一些隐藏的this
参数作为上下文,我有一个非常简单的设计。但是,由于事情通常比它们看起来更复杂,我想知道我们的C ++ gurus 将如何实现这一点,最好以优雅和标准方式实现。
欢迎所有建议!
答案 0 :(得分:9)
boost::function用于单个回调,boost::signal或boost::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不是一个选项时,我用这篇论文作为实现的基础。