gpt4 book ai didi

c++ - 事件与 boost::function

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:34 24 4
gpt4 key购买 nike

<分区>

既然代码胜于 Eloquent ,你会用这个吗:

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);
}

为了这个?

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# 世界,我发现第一种方法更直观,尽管冗长,但是否推荐在现实生活中使用它,还是它会导致比它的值(value)/性能影响更多的问题?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com