首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法作为回调。

问方法作为回调。
EN

Stack Overflow用户
提问于 2012-09-21 13:58:54
回答 5查看 249关注 0票数 1

我用接口实现了我的回调。

代码语言:javascript
复制
struct ICallback
{
  virtual bool operator()() const = 0;
};

以及用于添加回调的函数。

代码语言:javascript
复制
void addCallback(const ICallback* callback) { .... }

使用,回调在某个类中。

代码语言:javascript
复制
class BusImplemantation{
public:
    struct Foo : ICallback
    {
       virtual bool operator()() const { return true;}
    }foo;
    void OtherMethod();
    int OtherMember;       
};

但是因为回调是类(不是函数/方法),所以我不能在回调访问OtherMethod和OtherMember的范围内。如果回调不是类,而是方法而不是可能的。(内部类与方法)

I不能将OtherMethod和OtherMember作为参数传递给回调。

有什么更好的解决办法吗?也许用模板?

EN

回答 5

Stack Overflow用户

发布于 2012-09-21 14:19:29

使用std::function

代码语言:javascript
复制
void addCallback(const std::function<bool()>) { .... }

class BusImplemantation{
public:
    bool Callback() { return true; }
    void OtherMethod();
    int OtherMember;       
};

BusImplemantation obj;
addCallback(std::bind(&BusImplemantation::Callback, obj));
票数 2
EN

Stack Overflow用户

发布于 2012-09-21 14:04:19

关于如何实现这一点,请查看助推::绑定中的一些替代方案。

票数 1
EN

Stack Overflow用户

发布于 2012-09-21 14:09:58

你能这样做吗?

代码语言:javascript
复制
typedef std::function<bool()> CallbackFunc;
void addCallback(const CallbackFunc callback) { .... }

class BusImplemantation{
public:
    struct Foo
    {
       Foo(member) : OtherMember(member) { }

       bool operator()() const { return true; }

       void OtherMethod();
       int OtherMember;       
    }foo;
};

与其让回调成为接口,不如使用std::function使其成为函数对象(函子),而函子需要的任何额外数据或方法都可以是函子类的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12532030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档