由於代碼比語言更好,你這樣做:活動VS升壓::功能
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#世界,我發現第一種方法更直觀,雖然冗長,但它是否被重新調用用於現實生活中,還是會導致更多問題而不是價值/性能命中?
+1 - 爲了一個毫不猶豫的答案,我同意) – SChepurin
請你詳細說明爲什麼第一種方法會很糟糕? – silverhx
你正在浪費你的生命,定義一個無窮無盡的新班級*,這些班級都做同樣的事情*。相反,你可以不定義一個類,並使用lambda。 – Puppy