x
Yes
No
Do you want to visit DriveHQ English website?
Inicio
Características
Precios
Prueba gratuita
Software cliente
Acerca de nosotros
Servidor de archivos
|
Solución de copias de seguridad
|
Servidor FTP
|
Servidor de correo electrónico
|
Alojamiento web
|
Software cliente
Servidor de archivos
Solución de copia de seguridad
Servidor FTP
Servidor de correo electrónico
Alojamiento web
Software cliente
named_params.hpp - Hosted on DriveHQ Cloud IT Platform
Arriba
Subir
Descargar
Compartir
Publicar
Nueva carpeta
Nuevo archivo
Copiar
Cortar
Eliminar
Pegar
Clasificación
Actualizar
Ruta de la carpeta: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\test\utils\named_params.hpp
Girar
Efecto
Propiedad
Historial
// (C) Copyright Gennadiy Rozental 2005-2007. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/test for the library home page. // // File : $RCSfile$ // // Version : $Revision: 43798 $ // // Description : facilities for named function parameters support // *************************************************************************** #ifndef BOOST_TEST_NAMED_PARAM_022505GER #define BOOST_TEST_NAMED_PARAM_022505GER // Boost #include
#include
// Boost.Test #include
#include
#include
//____________________________________________________________________________// namespace boost { namespace nfp { // named function parameters // ************************************************************************** // // ************** forward declarations ************** // // ************************************************************************** // template
struct named_parameter; template
struct keyword; namespace nfp_detail { template
struct named_parameter_combine; // ************************************************************************** // // ************** access_to_invalid_parameter ************** // // ************************************************************************** // struct access_to_invalid_parameter {}; //____________________________________________________________________________// inline void report_access_to_invalid_parameter() { throw access_to_invalid_parameter(); } //____________________________________________________________________________// // ************************************************************************** // // ************** nil ************** // // ************************************************************************** // struct nil { template
operator T() const { report_access_to_invalid_parameter(); static T* v = 0; return *v; } template
nil operator()( Arg1 const& ) { report_access_to_invalid_parameter(); return nil(); } template
nil operator()( Arg1 const&, Arg2 const& ) { report_access_to_invalid_parameter(); return nil(); } template
nil operator()( Arg1 const&, Arg2 const&, Arg3 const& ) { report_access_to_invalid_parameter(); return nil(); } // Visitation support template
void apply_to( Visitor& V ) const {} }; // ************************************************************************** // // ************** named_parameter_base ************** // // ************************************************************************** // template
struct named_parameter_base { template
named_parameter_combine
operator,( NP const& np ) const { return named_parameter_combine
( np, *static_cast
(this) ); } }; //____________________________________________________________________________// // ************************************************************************** // // ************** named_parameter_combine ************** // // ************************************************************************** // template
struct named_parameter_combine : Rest, named_parameter_base
> { typedef typename NP::ref_type res_type; typedef named_parameter_combine
self_type; // Constructor named_parameter_combine( NP const& np, Rest const& r ) : Rest( r ), m_param( np ) {} // Access methods res_type operator[]( keyword
kw ) const { return m_param[kw]; } res_type operator[]( keyword
kw ) const { return m_param[kw]; } using Rest::operator[]; bool has( keyword
) const { return true; } using Rest::has; #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) template
named_parameter_combine
operator,( NP const& np ) const { return named_parameter_combine
( np, *this ); } #else using named_parameter_base
>::operator,; #endif // Visitation support template
void apply_to( Visitor& V ) const { m_param.apply_to( V ); Rest::apply_to( V ); } private: // Data members NP m_param; }; } // namespace nfp_detail // ************************************************************************** // // ************** named_parameter_combine ************** // // ************************************************************************** // template
struct named_parameter : nfp_detail::named_parameter_base
> { typedef T data_type; typedef ReferenceType ref_type; typedef unique_id id; // Constructor explicit named_parameter( ref_type v ) : m_value( v ) {} // Access methods ref_type operator[]( keyword
) const { return m_value; } ref_type operator[]( keyword
) const { return m_value; } template
nfp_detail::nil operator[]( keyword
) const { return nfp_detail::nil(); } bool has( keyword
) const { return true; } template
bool has( keyword
) const { return false; } // Visitation support template
void apply_to( Visitor& V ) const { V.set_parameter( rtti::type_id
(), m_value ); } private: // Data members ref_type m_value; }; //____________________________________________________________________________// // ************************************************************************** // // ************** no_params ************** // // ************************************************************************** // namespace nfp_detail { typedef named_parameter
no_params_type; } namespace { nfp_detail::no_params_type no_params( '\0' ); } // local namespace //____________________________________________________________________________// // ************************************************************************** // // ************** keyword ************** // // ************************************************************************** // template
struct keyword { typedef unique_id id; template
named_parameter
operator=( T const& t ) const { return named_parameter
( t ); } template
named_parameter
operator=( T& t ) const { return named_parameter
( t ); } named_parameter
operator=( char const* t ) const { return named_parameter
( t ); } }; //____________________________________________________________________________// // ************************************************************************** // // ************** typed_keyword ************** // // ************************************************************************** // template
struct typed_keyword : keyword
{ named_parameter
operator=( T const& t ) const { return named_parameter
( t ); } named_parameter
operator=( T& t ) const { return named_parameter
( t ); } }; //____________________________________________________________________________// template
struct typed_keyword
: keyword
, named_parameter
{ typedef unique_id id; typed_keyword() : named_parameter
( true ) {} named_parameter
operator!() const { return named_parameter
( false ); } }; //____________________________________________________________________________// // ************************************************************************** // // ************** optionally_assign ************** // // ************************************************************************** // template
inline void optionally_assign( T&, nfp_detail::nil ) { nfp_detail::report_access_to_invalid_parameter(); } //____________________________________________________________________________// template
inline void #if BOOST_WORKAROUND( __MWERKS__, BOOST_TESTED_AT( 0x3003 ) ) \ || BOOST_WORKAROUND( __DECCXX_VER, BOOST_TESTED_AT(60590042) ) optionally_assign( T& target, Source src ) #else optionally_assign( T& target, Source const& src ) #endif { using namespace unit_test; assign_op( target, src, 0 ); } //____________________________________________________________________________// template
inline void optionally_assign( T& target, Params const& p, Keyword k ) { if( p.has(k) ) optionally_assign( target, p[k] ); } //____________________________________________________________________________// } // namespace nfp } // namespace boost #include
#endif // BOOST_TEST_NAMED_PARAM_022505GER
named_params.hpp
Dirección de la página
Dirección del archivo
Anterior
8/13
Siguiente
Descargar
( 10 KB )
Comments
Total ratings:
0
Average rating:
No clasificado
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.