private:\
typedef a__parent parent;\
public:\
static const std::string& s_class() {\
static const std::string s_v(std::string(#a__class)+"<"+a__T1::s_class()+","+a__T2::s_class()+">");\
return s_v;\
}\
static void check_class_name() {a__class<a__T1,a__T2>::s_class();}\
public:\
virtual const std::string& s_cls() const {return s_class();}\
\
public:\
virtual void* cast(const std::string& a_class) const {\
if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
return parent::cast(a_class);\
}