ISO C++:如何设计活动?
我知道在 C++ 中设计事件的两种方法:
1:使用回调:
typedef void (*callback_type)(void);
class my_class
{
public:
my_class(callback_type c)
{
m_callback = c;
}
void raise_event()
{
m_callback();
}
private:
callback_type m_callback;
};
2:使用虚拟
方法:
class my_class
{
public:
virtual void my_event() = 0;
void raise_event()
{
my_event();
}
};
class main_class : public my_class
{
public:
virtual void my_event()
{
// Handle EVENT.
}
};
还有其他设计事件的方法或想法吗?
以及
在 ISO C++ 中设计事件的最佳模式是什么?
I know 2 ways for desiging an event in C++:
1: Using callbacks:
typedef void (*callback_type)(void);
class my_class
{
public:
my_class(callback_type c)
{
m_callback = c;
}
void raise_event()
{
m_callback();
}
private:
callback_type m_callback;
};
2: Using virtual
methods:
class my_class
{
public:
virtual void my_event() = 0;
void raise_event()
{
my_event();
}
};
class main_class : public my_class
{
public:
virtual void my_event()
{
// Handle EVENT.
}
};
Is there any other way or other idea for designing events?
and
What is the best pattern for designing events in ISO C++?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用 Boost.Signals 或 Boost.Signals2。
要模拟这些,您可以使用 Boost.Function/
std::function
的集合。为了模拟这些,您可以使用类型擦除(因此虚拟函数路由)来提高灵活性。
请注意,这些都不是微不足道的,因此如果可能的话,您应该真正尝试使用现有的解决方案。
You should use Boost.Signals or Boost.Signals2.
To emulate those, you can use a collection of Boost.Function's/
std::function
's.To emulate those, you use type erasure (so the virtual function route) for flexibility.
Note that none of that is too trivial, so you should really try to use an existing solution if possible.
设计将取决于您的具体要求。有关一个很好的示例,请参阅 ACE Reactor。
The design will depend on the specifics of your requirements. For a nice example, see ACE Reactor.