19 #ifndef __XRD_CL_ANY_OBJECT_HH__
20 #define __XRD_CL_ANY_OBJECT_HH__
38 AnyObject(): pHolder(0), pTypeInfo(0), pOwn( true ) {};
59 template <
class Type>
void Set( Type
object,
bool own =
true )
70 pHolder =
new ConcreteHolder<Type>(
object );
72 pTypeInfo = &
typeid( Type );
78 template <
class Type>
void Get( Type &
object )
80 if( !pHolder || (strcmp( pTypeInfo->name(),
typeid( Type ).name() )) )
85 object =
static_cast<Type
>( pHolder->Get() );
94 if( !pHolder )
return false;
95 return strcmp( pTypeInfo->name(),
typeid( Type* ).name() ) == 0;
114 virtual void Delete() = 0;
115 virtual void *
Get() = 0;
122 class ConcreteHolder:
public Holder
125 ConcreteHolder( Type
object ): pObject( object ) {}
126 virtual void Delete()
133 return (
void *)pObject;
141 const std::type_info *pTypeInfo;
void Set(Type object, bool own=true)
bool HasOwnership() const
Check if we own the object being stored.
void Get(Type &object)
Retrieve the object being held.