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

📄 visitor.h

📁 在LINUX下运行的仿真机器人服务器源代码
💻 H
字号:
// -*-c++-*-/***************************************************************************                                 visitor.h                        Classes for visiting and type extractiong                             -------------------    begin                : 20-FEB-2002    copyright            : (C) 2002 by The RoboCup Soccer Server                            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.                                                        * *                                                                         * ***************************************************************************/#if 0#ifndef _VISITOR_H_#define _VISITOR_H_#include "tuple.h"namespace rcss{  namespace util    {      template< class X >      class Visitor;      template< class H, class T >      class Visitor< TypeList< H, T > >        : private Visitor< T >      {      private:        virtual        void        visit( H h ) = 0;      protected:        ~Visitor()        {}      public:        Visitor()        {}        template< class X >        inline        void        startVisit( X x )        { Visitor< T >::startVisit( x ); }                inline        void        startVisit( H h )        { visit( h ); }              };                  template< class H >      class Visitor< TypeList< H, NullType > >      {       private:        virtual        void        visit( H h ) = 0;             protected:        ~Visitor()        {}      public:        Visitor()        {}                inline        void        startVisit( H h )        { visit( h ); }              };      template< typename T1 = NullType,        typename T2 = NullType2,        typename T3 = NullType3,        typename T4 = NullType4,        typename T5 = NullType5,        typename T6 = NullType6,        typename T7 = NullType7,        typename T8 = NullType8,        typename T9 = NullType9,        typename T10 = NullType10 >      class Visitor10      {      private:        virtual        void        visit( T1 ) {}        virtual        void        visit( T2 ) {}        virtual        void        visit( T3 ) {}        virtual        void        visit( T4 ) {}        virtual        void        visit( T5 ) {}        virtual        void        visit( T6 ) {}        virtual        void        visit( T7 ) {}        virtual        void        visit( T8 ) {}        virtual        void        visit( T9 ) {}        virtual        void        visit( T10 ) {}      protected:          virtual          ~Visitor10()          {}      public:        Visitor10()        {}        template< class X >        inline        void        startVisit( X x )        { visit( x ); }             };      template< typename T1 = NullType,        typename T2 = NullType2,        typename T3 = NullType3,        typename T4 = NullType4,        typename T5 = NullType5,        typename T6 = NullType6,        typename T7 = NullType7,        typename T8 = NullType8,        typename T9 = NullType9,        typename T10 = NullType10,        typename T11 = NullType11,        typename T12 = NullType12,        typename T13 = NullType13,        typename T14 = NullType14,        typename T15 = NullType15,        typename T16 = NullType16,        typename T17 = NullType17,        typename T18 = NullType18,        typename T19 = NullType19,        typename T20 = NullType20 >      class Visitor20      {      private:        virtual        void        visit( T1 ) {}        virtual        void        visit( T2 ) {}        virtual        void        visit( T3 ) {}        virtual        void        visit( T4 ) {}        virtual        void        visit( T5 ) {}        virtual        void        visit( T6 ) {}        virtual        void        visit( T7 ) {}        virtual        void        visit( T8 ) {}        virtual        void        visit( T9 ) {}        virtual        void        visit( T10 ) {}        virtual        void        visit( T11 ) {}        virtual        void        visit( T12 ) {}        virtual        void        visit( T13 ) {}        virtual        void        visit( T14 ) {}        virtual        void        visit( T15 ) {}        virtual        void        visit( T16 ) {}        virtual        void        visit( T17 ) {}        virtual        void        visit( T18 ) {}        virtual        void        visit( T19 ) {}        virtual        void        visit( T20 ) {}      protected:          virtual        ~Visitor20()        {}      public:        Visitor20()        {}        template< class X >        inline        void        startVisit( X x )        { visit( x ); }             };      template< class TList >      class TypeExtractor        : public Visitor< TList >      {      private:        Tuple< TList > M_holder;      protected:        template< class X >        inline        void        setValue( const X& x )        { M_holder = x; }        ~TypeExtractor()        {}      public:        TypeExtractor()        {}        template< class X >        inline        bool        isTypeOf() const        { return M_holder.template isTypeOf< X >(); }                template< class X >        inline        bool        isTypeOf( X* x ) const        { return M_holder.isTypeOf( x ); }                        template< class X >        inline        X&        get()        { return M_holder.template get< X >(); }        template< class X >        inline        X&        get( X* x )        { return M_holder.get( x ); }        template< class X >        inline        const X&        get() const        { return M_holder.template get< X >(); }        template< class X >        inline        const X&        get( X* x ) const        { return M_holder.get( x ); }      };      template< typename T1 = NullType,        typename T2 = NullType2,        typename T3 = NullType3,        typename T4 = NullType4,        typename T5 = NullType5,        typename T6 = NullType6,        typename T7 = NullType7,        typename T8 = NullType8,        typename T9 = NullType9,        typename T10 = NullType10 >      class TypeExtractor10        : public Visitor10< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 >      {      private:        Tuple10< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 > M_holder;      protected:        template< class X >        inline        void        setValue( const X& x )        { M_holder = x; }          virtual          ~TypeExtractor10()          {}      public:        TypeExtractor10()        {}        template< class X >        inline        bool        isTypeOf() const        { return M_holder.template isTypeOf< X >(); }                template< class X >        inline        bool        isTypeOf( X* x ) const        { return M_holder.isTypeOf( x ); }                template< class X >        inline        X&        get()        { return M_holder.template get< X >(); }        template< class X >        inline        X&        get( X* x )        { return M_holder.get( x ); }        template< class X >        inline        const X&        get() const        { return M_holder.template get< X >(); }        template< class X >        inline        const X&        get( X* x ) const        { return M_holder.get( x ); }      };      template< typename T1 = NullType,        typename T2 = NullType2,        typename T3 = NullType3,        typename T4 = NullType4,        typename T5 = NullType5,        typename T6 = NullType6,        typename T7 = NullType7,        typename T8 = NullType8,        typename T9 = NullType9,        typename T10 = NullType10,        typename T11 = NullType11,        typename T12 = NullType12,        typename T13 = NullType13,        typename T14 = NullType14,        typename T15 = NullType15,        typename T16 = NullType16,        typename T17 = NullType17,        typename T18 = NullType18,        typename T19 = NullType19,        typename T20 = NullType20 >      class TypeExtractor20        : public Visitor20< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,        T11, T12, T13, T14, T15, T16, T17, T18, T19, T20 >      {      private:        Tuple20< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,          T11, T12, T13, T14, T15, T16, T17, T18, T19, T20 > M_holder;      protected:        template< class X >        inline        void        setValue( const X& x )        { M_holder = x; }          virtual        ~TypeExtractor20()        {}      public:        TypeExtractor20()        {}        template< class X >        inline        bool        isTypeOf() const        { return M_holder.template isTypeOf< X >(); }                template< class X >        inline        bool        isTypeOf( X* x ) const        { return M_holder.isTypeOf( x ); }                template< class X >        inline        X&        get()        { return M_holder.template get< X >(); }        template< class X >        inline        X&        get( X* x )        { return M_holder.get( x ); }        template< class X >        inline        const X&        get() const        { return M_holder.template get< X >(); }        template< class X >        inline        const X&        get( X* x ) const        { return M_holder.get( x ); }      };  }}#endif#endif

⌨️ 快捷键说明

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