798 Chapter 18 Object-Oriented Infrastructure
class Rtti
{
public:
Rtti (const char* acName, int iNumBaseClasses,...)
{
m_acName = acName;
if (iNumBaseClasses == 0)
{
m_iNumBaseClasses = 0;
m_apkBaseType = 0;
}
else
{
m_iNumBaseClasses = iNumBaseClasses;
m_apkBaseType = new Rtti*[iNumBaseClasses];
va_list list;
va_start(list,iNumBaseClasses);
for(inti=0;i<iNumBaseClasses; i++)
{
m_apkBaseType[i] = va_arg(list, const Rtti*);
}
va_end(list);
}
}
~Rtti ()
{
delete[] m_apkBaseType;
}
bool IsDerived (const Rtti& rkType) const
{
if (&rkType == this)
{
return true;
}
for(inti=0;i<m_iNumBaseClasses; i++)
{
if (m_apkBaseType[i]->IsDerived(rkType))
{
return true;
}
}
return false;
}