265
265
const ValueType *type_;
268
// //////////////////////////////////////////////////////////////////
269
// //////////////////////////////////////////////////////////////////
270
// Value, free functions
271
// //////////////////////////////////////////////////////////////////
272
// //////////////////////////////////////////////////////////////////
275
* Notes: user can provides a specific implementation by overloding getValueType() for a given
277
* inline const ValueType &getValueType( const Type<T> & )
280
#ifdef CPPTL_NO_FUNCTION_TEMPLATE_ORDERING
281
struct HasDefaultValueTypeHelper
285
inline HasDefaultValueTypeHelper getValueType( ... )
287
return HasDefaultValueTypeHelper();
291
inline const ValueType &getValueTypeHelper( const ValueType &valueType,
292
const Type<T> &type )
298
inline const ValueType &getValueTypeSelector( const Type<T> &type )
300
return getValueTypeHelper( getValueType(type), type );
303
# define CPPTL_GET_VALUE_TYPE( AType ) ::CppTL::getValueTypeSelector( ::CppTL::Type<AType>() )
307
# define CPPTL_GET_VALUE_TYPE( AType ) ::CppTL::getValueType( ::CppTL::Type<AType>() )
312
template<typename TargetValueType>
313
void initialize( Value &value, Type<TargetValueType> )
317
template<typename TargetValueType>
318
Value initialize( Type<TargetValueType> )
323
template<typename TargetValueType>
324
Value makeValue( const TargetValueType &value )
326
const ValueType &type = CPPTL_GET_VALUE_TYPE( TargetValueType );
327
return Value( type, &value );
330
template<typename TargetValueType>
331
void makeValue( Value &value, const TargetValueType &initialValue )
336
template<typename TargetValueType>
337
const TargetValueType &any_cast( const Value &value, Type<TargetValueType> )
341
template<typename TargetValueType>
342
TargetValueType &any_cast( Value &value, Type<TargetValueType> )
346
template<typename TargetValueType>
347
const TargetValueType *any_cast( const Value *value, Type<TargetValueType> )
351
template<typename TargetValueType>
352
TargetValueType *any_cast( Value *value, Type<TargetValueType> )
357
269
// //////////////////////////////////////////////////////////////////
358
270
// //////////////////////////////////////////////////////////////////
546
// //////////////////////////////////////////////////////////////////
547
// //////////////////////////////////////////////////////////////////
548
// Value, free functions
549
// //////////////////////////////////////////////////////////////////
550
// //////////////////////////////////////////////////////////////////
553
* Notes: user can provides a specific implementation by overloding getValueType() for a given
555
* inline const ValueType &getValueType( const Type<T> & )
558
#ifdef CPPTL_NO_FUNCTION_TEMPLATE_ORDERING
559
inline HasDefaultValueTypeHelper getValueType( ... )
561
return HasDefaultValueTypeHelper();
565
inline const ValueType &getValueTypeHelper( const ValueType &valueType,
566
const Type<T> &type )
572
inline const ValueType &getValueTypeSelector( const Type<T> &type )
574
return getValueTypeHelper( getValueType(type), type );
577
# define CPPTL_GET_VALUE_TYPE( AType ) ::CppTL::getValueTypeSelector( ::CppTL::Type<AType>() )
581
# define CPPTL_GET_VALUE_TYPE( AType ) ::CppTL::getValueType( ::CppTL::Type<AType>() )
586
template<typename TargetValueType>
587
void initialize( Value &value, Type<TargetValueType> )
591
template<typename TargetValueType>
592
Value initialize( Type<TargetValueType> )
597
template<typename TargetValueType>
598
Value makeValue( const TargetValueType &value )
600
const ValueType &type = CPPTL_GET_VALUE_TYPE( TargetValueType );
601
return Value( type, &value );
604
template<typename TargetValueType>
605
void makeValue( Value &value, const TargetValueType &initialValue )
610
template<typename TargetValueType>
611
const TargetValueType &any_cast( const Value &value, Type<TargetValueType> )
615
template<typename TargetValueType>
616
TargetValueType &any_cast( Value &value, Type<TargetValueType> )
620
template<typename TargetValueType>
621
const TargetValueType *any_cast( const Value *value, Type<TargetValueType> )
625
template<typename TargetValueType>
626
TargetValueType *any_cast( Value *value, Type<TargetValueType> )
631
634
// //////////////////////////////////////////////////////////////////
632
635
// //////////////////////////////////////////////////////////////////