C++中关于判断一个类是否继承于另外一个类的方法?解决思路
C++中关于判断一个类是否继承于另外一个类的方法?
Class A
{
Public:
Virtual void function(){}
}
Class B:public class A
{
Public:
Virtual void function(){}
}
Class C:public class B
{
Public:
Virtual void function(){}
}
C* p=new C;
我现在运行时刻判断C类是否继承于B或则A,应该怎么在C++中实现?比如说,我有下面这个函数
IsDerivedFrom(C,A),这样的功能应该怎么实现?
------解决方案--------------------
楼主~我系****帮你找来的
用template来判断类继承的关系
能自动判断一个类是不是从另外一个类继承下来的:
template<typename T , typename TBase> class TIsDerived
{
public:
static int t(TBase* base)
{
return 1;
}
static char t(void* t2)
{
return 0;
}
enum
{
Result = ( sizeof(int) == sizeof(t( (T*)NULL) ) ),
};
};
用途:
bool AISDerviedFromB = TIsDerived<ClassA, ClassB>::Result ;
如果ClassA是从ClassB派生的,那么 AISDerviedFromB 为true, 否则为false
Trackback: http://tb.blog.****.net/TrackBack.aspx?PostId=617287
Class A
{
Public:
Virtual void function(){}
}
Class B:public class A
{
Public:
Virtual void function(){}
}
Class C:public class B
{
Public:
Virtual void function(){}
}
C* p=new C;
我现在运行时刻判断C类是否继承于B或则A,应该怎么在C++中实现?比如说,我有下面这个函数
IsDerivedFrom(C,A),这样的功能应该怎么实现?
------解决方案--------------------
楼主~我系****帮你找来的
用template来判断类继承的关系
能自动判断一个类是不是从另外一个类继承下来的:
template<typename T , typename TBase> class TIsDerived
{
public:
static int t(TBase* base)
{
return 1;
}
static char t(void* t2)
{
return 0;
}
enum
{
Result = ( sizeof(int) == sizeof(t( (T*)NULL) ) ),
};
};
用途:
bool AISDerviedFromB = TIsDerived<ClassA, ClassB>::Result ;
如果ClassA是从ClassB派生的,那么 AISDerviedFromB 为true, 否则为false
Trackback: http://tb.blog.****.net/TrackBack.aspx?PostId=617287