首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Events vs boost::function

Events vs boost::function
EN

Stack Overflow用户
提问于 2012-12-16 21:26:33
回答 2查看 264关注 0票数 1

既然代码比文字更能说明问题,你会使用下面的代码:

代码语言:javascript
复制
struct StringEvent
{
    const void* source;
    const std::string str;

    StringEvent(const void* source, const std::string& str)
        : source(source), str(str) 
    { }
};

class StringEventListener
{
public:
    virtual void handler(const StringEvent& event) = 0;
}

class Test : public StringEventListener
{
public:
    void handler(const StringEvent& event) 
    { 
        std::cout << event.str << std::endl; 
    }
}

class EventSource
{
public:
    EventSource(StringEventListener* listener) 
    { 
        listener->handler(StringEvent(this, std::string("foo"))); 
    } 
}

int main()
{
    Test test;

    EventSource(&test);
}

就为了这个?

代码语言:javascript
复制
class Test 
{
public:
    void handler(const std::string& str) 
    { 
        std::cout << str << std::endl; 
    }
};

class EventSource
{
public:
    EventSource(const boost::function<void (const std::string&)>& funcPtr)
    {
        funcPtr(std::string("foo"));
    }
};

int main()
{
    Test test;

    EventSource(boost::bind(&Test::handler, &test, _1));
}

要使类EventSource调用test.handler("foo"),请执行以下操作

我来自Java/C#世界,我发现第一种方法更直观,尽管冗长,但它是否建议在现实生活中使用,或者它是否会造成比其价值/性能影响更多的问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-16 21:40:57

我绝对不会使用第一个版本。那太可怕了。第二个版本要好得多-它可以是lambdas或者诸如此类的东西。

此外,boost::function也不是函数指针。

票数 1
EN

Stack Overflow用户

发布于 2012-12-16 21:38:02

在Boost/C++中,你可以使用'functors‘(带有静态方法的对象)来保存回调数据,还有一个回调对象(在前面的例子中)。

这是一个风格问题,如果你需要对象来传递数据。

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

https://stackoverflow.com/questions/13901716

复制
相关文章

相似问题

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