⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 allocator.hpp

📁 非常好的进化算法EC 实现平台 可以实现多种算法 GA GP
💻 HPP
字号:
/* *  Open BEAGLE *  Copyright (C) 2001-2005 by Christian Gagne and Marc Parizeau * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public *  License as published by the Free Software Foundation; either *  version 2.1 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * *  Contact: *  Laboratoire de Vision et Systemes Numeriques *  Departement de genie electrique et de genie informatique *  Universite Laval, Quebec, Canada, G1K 7P4 *  http://vision.gel.ulaval.ca * *//*! *  \file   beagle/Allocator.hpp *  \brief  Definition of abstract class Allocator. *  \author Christian Gagne *  \author Marc Parizeau *  $Revision: 1.4 $ *  $Date: 2005/06/21 12:50:44 $ *//*! *  \defgroup Allocs Allocators *  \ingroup OOF *  \brief Object allocators of the framework, part of the Object Oriented Foundations. * *  An important design choice that gives flexibility to Open BEAGLE is the allocators, a kind of  *  object factory that generates objects in an abstract fashion. An abstract allocator class named  *  Beagle::Allocator is implemented to define the methods to create objects on the heap.  *  \code *  class Allocator : public Object { *  public: *    virtual Object* allocate() const =0; *    virtual Object* clone(const Object&) const =0; *    virtual void    copy(Object&, const Object&) const =0; *  }; *  \endcode * *  The purpose of the allocators is to provide factory methods to create and clone new types of  *  objects derived from Open BEAGLE constituents. With such mechanism, any user could create new type  *  of objects that redefine the default one and use associated allocators that return pointers to  *  this new type of objects. This mechanism is similar and coherent with the \e Factory \e Method  *  design pattern. Usually, an allocator is used to allocate objects through their default  *  constructor and clones the objects by calling their copy constructor. An allocator can also copy  *  an existing object of a given type into an other. To simplify the task, a simple standard  *  parametrized allocator named Beagle::AllocatorT is defined to override the virtual method of the *  abstract class Beagle::Allocator. Like the smart pointers \c Handle type, each component of  *  Open BEAGLE has a nested allocator type called \c Alloc. The users are encouraged to define it  *  in their classes. *  \code *  class AnyClass : public SuperClass {  *  public: *    typedef PointerT<AnyClass,SuperClass::Handle>  Handle; *    typedef AllocatorT<AnyClass,SuperClass::Alloc> Alloc *  }; *  \endcode *  However, the template Beagle::AllocatorT cannot be used to define an \c Alloc type for an  *  abstract type. The reason is that the method \c allocate and \c clone cannot be implemented  *  to instantiate object of the abstract allocated type. To solve this problem, another templated *  allocator type is implemented, Beagle::AbstractAllocT. This allocator does not define the methods  *  \c allocate and \c clone, but is usable in the same way than Beagle::AllocatorT as an allocator *  type for abstract types. * */ #ifndef Beagle_Allocator_hpp#define Beagle_Allocator_hpp#include "beagle/config.hpp"#include "beagle/macros.hpp"#include "beagle/Object.hpp"namespace Beagle {// Forward declarations.template <class T, class BaseType> class AbstractAllocT;template <class T, class BaseType> class PointerT;template <class T, class BaseType> class ContainerT;/*! *  \class Allocator beagle/Allocator.hpp "beagle/Allocator.hpp" *  \brief Basic Beagle allocator class. *  \ingroup OOF *  \ingroup Allocs */class Allocator : public Object {public:  //! Allocator allocator type.  typedef AbstractAllocT<Allocator,Object::Alloc>          Alloc;  //! Allocator handle type.  typedef PointerT<Allocator,Object::Handle>          Handle;  //! Allocator bag type.  typedef ContainerT<Allocator,Object::Bag>          Bag;           Allocator() { }  virtual ~Allocator() { }  virtual Object* allocate() const;  virtual Object* clone(const Object& inOrigObj) const;  virtual void    copy(Object& outCopyObj, const Object& inOrigObj) const;};}#endif // Beagle_Allocator_hpp

⌨️ 快捷键说明

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