observer.h

来自「2009 ROBOCUP 仿真2DSERVER 源码」· C头文件 代码 · 共 122 行

H
122
字号
// -*-c++-*-/***************************************************************************                                observer.h                           Base for observer classes                             -------------------    begin                : 2002-10-07    copyright            : (C) 2002 by The RoboCup Soccer Simulator                           Maintenance Group.    email                : sserver-admin@lists.sourceforge.net***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU LGPL as published by the Free Software  * *   Foundation; either version 2 of the License, or (at your option) any  * *   later version.                                                        * *                                                                         * ***************************************************************************/#ifndef RCSSOBSERVER_H#define RCSSOBSERVER_H#include "rcssexceptions.h"#include <memory>namespace rcss {/*!//===================================================================////  CLASS: Observer////  DESC: Base observer.////===================================================================*/template < class S >class BaseObserver {public:    typedef S Sender;private:    Sender * M_sender;    bool M_owns_sender;public:    BaseObserver()        : M_sender( NULL ),          M_owns_sender( false )      { }    BaseObserver( Sender & sender )        : M_sender( &sender ),          M_owns_sender( false )      { }    BaseObserver( std::auto_ptr< Sender > sender )        : M_sender( sender.release() ),          M_owns_sender( true )      { }    ~BaseObserver()      {          clear();      }    void setSender( Sender & sender )      {          clear();          M_sender = &sender;          M_owns_sender = false;      }    void setSender( std::auto_ptr< Sender > sender )      {          clear();          M_sender = sender.release();          M_owns_sender = true;      }    Sender & sender()      {          if ( M_sender == NULL )          {              throw util::NullErr( __FILE__, __LINE__,                                   "Sender is null" );          }          return *M_sender;      }    const Sender & sender() const      {          if ( M_sender == NULL )          {              throw util::NullErr( __FILE__, __LINE__,                                   "Sender is null" );          }          return *M_sender;      }private:    void clear()      {          if ( M_owns_sender )          {              delete M_sender;              M_sender = NULL;          }      }    BaseObserver( const BaseObserver & ); // not used;    BaseObserver & operator=( const BaseObserver & ); // not used;};}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?