paramsetter.hpp
来自「2009 ROBOCUP 仿真2DSERVER 源码」· HPP 代码 · 共 170 行
HPP
170 行
// -*-c++-*-/*************************************************************************** paramsetter.hpp Interface for setting parameter values ------------------- begin : 14-MAY-2003 copyright : (C) 2003 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. * * * ***************************************************************************/#ifndef PARAMSETTER_HPP#define PARAMSETTER_HPP#include <boost/shared_ptr.hpp>namespace rcss {namespace conf {namespace priv {template< typename Arg >class SetterBase {public: virtual ~SetterBase() {} virtual void operator()( Arg arg ) = 0;};template< typename Arg, typename C >class SetterMFun : public SetterBase< Arg > {public: SetterMFun( C * c, void(C::*fun)( Arg ) ) : m_class( c ) , m_fun( fun ) { } void operator()( Arg arg ) { (m_class->*m_fun)( arg ); }private: C * m_class; void(C::*m_fun)( Arg );};template< typename Arg >class SetterPFun : public SetterBase< Arg > {public: SetterPFun( void(*fun)( Arg ) ) : m_fun( fun ) { } void operator()( Arg arg ) { (*m_fun)( arg ); }private: void(*m_fun)( Arg );};template< typename Arg >class SetterArg : public SetterBase< Arg > {public: SetterArg( Arg & arg ) : m_arg( arg ) { } void operator()( Arg arg ) { m_arg = arg; }private: Arg & m_arg;};}template< typename Arg >class Setter {public: Setter( const Setter< Arg > & s ) : m_setter( s.m_setter ) { } template< typename C > Setter( C * c, void(C::*fun)( Arg ) ) : m_setter( new rcss::conf::priv::SetterMFun< Arg, C >( c, fun ) ) { } Setter( void(*fun)( Arg )) : m_setter( new rcss::conf::priv::SetterPFun< Arg >( fun ) ) { } Setter( Arg & arg ) : m_setter( new rcss::conf::priv::SetterArg< Arg >( arg ) ) { } void operator()( Arg arg ) { m_setter->operator()( arg ); }private: boost::shared_ptr< rcss::conf::priv::SetterBase< Arg > > m_setter;};template< typename Arg >staticinlineSetter< Arg >makeSetter( Arg & arg ){ return Setter< Arg >( arg );}template< typename Arg >staticinlineSetter< Arg >makeSetter( void(*&pfun)( Arg ) ){ return Setter< Arg >( pfun );}template< typename Arg, typename C >staticinlineSetter< Arg >makeSetter( C* c, void(C::*mfun)( Arg ) ){ return Setter< Arg >( c, mfun );}template< typename Arg, typename C >staticinlineSetter< Arg >makeSetter( C& c, void(C::*mfun)( Arg ) ){ return Setter< Arg >( &c, mfun );}}}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?