none
VC++有没有委托事件和消息的功能,以及怎么实现? RRS feed

答案

  • Visual C++ 是开发工具,不涉及语言层面的东西。这件事情是这样的:Managed C++ 实际上是有委托的,而Natived C++ 是没有的。
    Managed C++ 的委托实现:
    声明:
            private:
                EventHandler^ _PageLoadComplete;
            public:
                virtual event EventHandler^ AxPageLoadCompleted
                {
                  virtual void add(EventHandler^ value)
                  {
                    _PageLoadComplete += value;
                  };
                  virtual void remove(EventHandler^ value)
                  {
                    _PageLoadComplete -= value;
                  };
                };

    触发:
                void OnPageLoadComplete()
                {
                   if(nullptr != this->_PageLoadComplete)
                   {
                       this->_PageLoadComplete(this,EventArgs::Empty);
                   }
                }


    Natived C++ 就没有这些了,一般是通过消息(比如WM_CLOSE)、回调(比如SetTimer 需要加一个定时器到时的回调函数)、观察者模式(Observer) 来实现通知。


    2010年1月20日 2:27
    版主

全部回复

  • C++没有委托机制。可以通过回调函数,或者观察者模式实现。

    2010年1月20日 1:08
    版主
  • Visual C++ 是开发工具,不涉及语言层面的东西。这件事情是这样的:Managed C++ 实际上是有委托的,而Natived C++ 是没有的。
    Managed C++ 的委托实现:
    声明:
            private:
                EventHandler^ _PageLoadComplete;
            public:
                virtual event EventHandler^ AxPageLoadCompleted
                {
                  virtual void add(EventHandler^ value)
                  {
                    _PageLoadComplete += value;
                  };
                  virtual void remove(EventHandler^ value)
                  {
                    _PageLoadComplete -= value;
                  };
                };

    触发:
                void OnPageLoadComplete()
                {
                   if(nullptr != this->_PageLoadComplete)
                   {
                       this->_PageLoadComplete(this,EventArgs::Empty);
                   }
                }


    Natived C++ 就没有这些了,一般是通过消息(比如WM_CLOSE)、回调(比如SetTimer 需要加一个定时器到时的回调函数)、观察者模式(Observer) 来实现通知。


    2010年1月20日 2:27
    版主