rtti.cpp

来自「介绍c++游戏编程」· C++ 代码 · 共 67 行

CPP
67 行
字号

#include "stdafx.h"
#include "RTTI.h"
#include <stdarg.h>


RTTI::RTTI(const std::string & className) : 
    m_className(className), 
    m_numParents(0),
    m_pBaseRTTI(NULL)
{}


RTTI::RTTI(const std::string & className, const RTTI & baseRTTI) :
    m_className(className), 
    m_numParents(1)
{
    m_pBaseRTTI = new const RTTI*[1];
    m_pBaseRTTI[0] = &baseRTTI;
}


RTTI::RTTI(const std::string & className, int numParents, ...) :
    m_className(className)
{
    if (numParents < 1)
    {
        m_numParents = 0;
        m_pBaseRTTI  = NULL;
    }
    else
    {
        m_numParents = numParents;
        m_pBaseRTTI = new const RTTI*[m_numParents];

        va_list v;
        va_start(v,numParents);
        for (int i=0; i < m_numParents; ++i) 
        {
            m_pBaseRTTI[i] = va_arg(v, const RTTI*);
        }
        va_end(v);
    }
}


RTTI::~RTTI()
{
    delete [] m_pBaseRTTI;
}


bool RTTI::DerivesFrom (const RTTI & rtti) const
{
    const RTTI * pCompare = this;
    if (pCompare == &rtti)
        return true;

    for (int i=0; i < m_numParents; ++i)
    {
        if (m_pBaseRTTI[i]->DerivesFrom(rtti))
            return true;
    }

    return false;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?