namespace gtl{
inline int getTypeMaster()
{
static int v=0;
return ++v;
}
template<class T>
inline int getType()
{
static int value=0;
if(value)
return value;
return value=getTypeMaster();
}
}
class _any
{
public:
class _data
{
public:
_data():type(0){};
int type;
};
template<class T>
class _data_sub:public _data
{
public:
_data_sub(T in):data(in)
{
type=gtl::getType<T>();
};
T data;
};
_data* tmp;
template<class T>
T getSafe()
{
if(!tmp->type || tmp->type!=gtl::getType<T>())
{
return T();
}
return (static_cast<_data_sub<T>* >(tmp))->data;
}
template<class T>
T& get()
{
return (static_cast<_data_sub<T>* >(tmp))->data;
}
template<class T>
_any(T in)
{
tmp=new _data_sub<T>(in);
}
~_any()
{
delete tmp;
}
};