コードは言葉よりも優れているので、これを使用しますか?
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# の世界から来て、最初のアプローチは冗長ではありますが、より直感的だと思いますが、実際の状況で使用することをお勧めしますか、それとも価値/パフォーマンスヒットよりも多くの問題を引き起こしますか?