Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ISO C&x2B+;:如何设计活动?_C++_Events_Design Patterns_Iso - Fatal编程技术网

C++ ISO C&x2B+;:如何设计活动?

C++ ISO C&x2B+;:如何设计活动?,c++,events,design-patterns,iso,C++,Events,Design Patterns,Iso,我知道用C++设计事件的两种方法: 1:使用回调: 2:使用virtual方法: 设计活动还有其他方法或想法吗 及 强>在ISO C++中设计事件的最佳模式是什么?< /强> < p>应使用BooS.Stor或Booost。 要模拟这些,您可以使用Boost.Function/std::Function的集合。 为了模拟这些情况,您可以使用类型擦除(因此虚拟函数路由)以提高灵活性 请注意,这些都不是很简单,因此如果可能,您应该尝试使用现有的解决方案。您应该使用Boost.Signals或Boo

我知道用C++设计事件的两种方法:

1:使用回调: 2:使用
virtual
方法: 设计活动还有其他方法或想法吗


<>强>在ISO C++中设计事件的最佳模式是什么?< /强>

< p>应使用BooS.Stor或Booost。 要模拟这些,您可以使用Boost.Function/
std::Function
的集合。
为了模拟这些情况,您可以使用类型擦除(因此虚拟函数路由)以提高灵活性


请注意,这些都不是很简单,因此如果可能,您应该尝试使用现有的解决方案。

您应该使用Boost.Signals或Boost.Signals2。
要模拟这些,您可以使用Boost.Function/
std::Function
的集合。
为了模拟这些情况,您可以使用类型擦除(因此虚拟函数路由)以提高灵活性


请注意,这些都不是很简单,因此如果可能的话,您应该尝试使用现有的解决方案。

设计将取决于您需求的具体情况。有关一个很好的示例,请参见。

设计将取决于您需求的具体情况。一个很好的例子,参见./P>注释:ISO C++现在指的是C++ 11ISO C++是语言构造和语义的标准,而不是一本指定或建议设计模式的书。每种方法都可以有自己的优点和缺点,你需要指定你的需求,以提出适当的解决方案。注意,ISO C++现在指的是C++ 11ISO C++是语言结构和语义的标准,而不是一本指定或建议设计模式的书。每种方法都可以有自己的优点和缺点,您需要详细说明您的需求,以便为您提供适当的解决方案。这应该是一个答案吗?因为它看起来、感觉和听起来都像一条评论,哦,是的,这是一条评论@Als:我不认为这是一个评论,而不是一个答案。@GMan:因为它不能帮助OP解决问题,这在我看来不是太难。Q不够清楚,无法回答,那么你应该寻求更多的信息来回答它,而不是发布一个答案作为答案。这应该是一个答案吗?因为它看起来、感觉和听起来都像一条评论,哦,是的,这是一条评论@Als:我不认为这是一个评论,而不是一个答案。@GMan:因为它不能帮助OP解决问题,这在我看来不是太难。Q不够清楚,无法回答,那么你应该寻求更多的信息来回答它,而不是发布一个答案作为答案。
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;
};
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.
   }
};