41 static string demangle(
const char *mangled)
46 demangled = __cxa_demangle(mangled, NULL, 0, &status);
58 logger = Logger::getLogger(
"Object");
60 template <
typename T>
static string getClassName(T t)
62 const char *mangled =
typeid(t).name();
63 string tn = demangle(mangled);
64 if(tn[tn.length()-1]==
'*')
65 tn = tn.substr(0,tn.length()-1);
68 template <
typename T>
void operator<<(T &t)
70 if(getClassName(t)==
"Object")
73 this->typeName = to->typeName;
74 this->pointer = to->pointer;
78 this->typeName = getClassName(t);
84 template <
typename T>
void operator<<(T *t)
86 if(getClassName(t)==
"Object")
89 this->typeName = to->typeName;
90 this->pointer = to->pointer;
94 this->typeName = getClassName(t);
103 bool isInstanceOf(
string className)
105 if(this->typeName==className)
110 template <
typename T>
bool isSimilarObject(T t)
112 string cn = getClassName(&t);
119 template <
typename T>
bool isSimilarObject(T *t)
121 string cn = getClassName(t);
130 return this->typeName;
132 void setTypeName(
string type)
134 this->typeName = type;
136 template <
typename T> T* getPointer()
139 string cn = getClassName(&t);
142 return (T*)this->pointer;
146 template <
typename T> T getValue()
149 string cn = getClassName(&t);
151 return *(T*)this->pointer;
155 void* getVoidPointer()
157 return this->pointer;
160 static bool instanceOf(T instance,
string className)
163 const char *mangled =
typeid(instance).name();
165 mangled = __cxa_demangle(mangled, NULL, 0, &status);
168 if(cls==className || cls==(className+
"*"))
return true;