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

📄 container.hpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 HPP
字号:
// file      : Utility/Hetero/Container.hpp// author    : Boris Kolpackov <boris@kolpackov.net>// copyright : Copyright (c) 2002-2003 Boris Kolpackov// license   : http://kolpackov.net/license.html#ifndef UTILITY_HETERO_CONTAINER_HPP#define UTILITY_HETERO_CONTAINER_HPP#include <typeinfo>namespace Utility{  namespace Hetero  {    //    //    //    class Typing {};    //    //    //    class Container    {    public:      ~Container ()      {        delete holder_;      }    public:      template <typename T>      Container (T const& t)          : holder_ (new TypedHolder<T> (t))      {      }      Container (Container const& c)          : holder_ (c.holder_->clone ())      {      }    public:      template <typename T>      Container&      operator= (T const& t)      {        delete holder_;        holder_ = 0;        holder_ = new TypedHolder<T> (t);        return *this;      }      Container&      operator= (Container const& c)      {        delete holder_;        holder_ = 0;        holder_ = c.holder_->clone ();        return *this;      }    public:      template <typename T>      operator T& ()      {        return value<T> ();      }      template <typename T>      operator T const& () const      {        return value<T> ();      }    public:      template <typename T>      T&      value ()      {        if (holder_->type () == typeid (T))        {          return dynamic_cast<TypedHolder<T>*>(holder_)->value ();        }        else        {          throw Typing ();        }      }      template <typename T>      T const&      value () const      {        if (holder_->type () == typeid (T))        {          return dynamic_cast<TypedHolder<T>*>(holder_)->value ();        }        else        {          throw Typing ();        }      }    public:      std::type_info const&      type () const      {        return holder_->type ();      }    public:      template <typename T>      friend T      operator+ (Container const& a, T const& b)      {        return a.value<T> () + b;      }      template <typename T>      friend T      operator+ (T const& a, Container const& b)      {        return a + b.value<T> ();      }    private:      struct Holder      {        virtual        ~Holder () {}        virtual Holder*        clone () const = 0;        virtual std::type_info const&        type () const = 0;      };      template <typename T>      struct TypedHolder : public Holder      {        TypedHolder (T const& value)            : value_ (value)        {        }        virtual Holder*        clone () const        {          return new TypedHolder<T> (value_);        }        virtual std::type_info const&        type () const        {          return typeid (T);        }        T const&        value () const        {          return value_;        }        T&        value ()        {          return value_;        }      private:        T value_;      };      Holder* holder_;    };  }}#endif  // UTILITY_HETERO_CONTAINER_HPP//Container.hpp,v 1.1 2005/05/24 04:33:12 turkaye Exp

⌨️ 快捷键说明

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