ciao.
Ho questa classe di un progetto open sorce,
codice:
#ifndef WM5RTTI_H
#define WM5RTTI_H

#include "Wm5CoreLIB.h"

namespace Wm5
{

class WM5_CORE_ITEM Rtti
{
public:
    // Construction and destruction.  The name must be unique among all
    // objects in the system.  In the Wm5 namespace, a class Foo should use
    // "Wm5.Foo".  If an application has another namespace, SomeName, then
    // the name should be "SomeName.Foo".
    Rtti (const char* name, const Rtti* baseType);
    ~Rtti ();

    inline const char* GetName () const;
    inline bool IsExactly (const Rtti& type) const;
    bool IsDerived (const Rtti& type) const;

private:
    const char* mName;
    const Rtti* mBaseType;
};

#include "Wm5Rtti.inl"

}
questo è il .inl
codice:
//----------------------------------------------------------------------------
inline const char* Rtti::GetName () const
{
    return mName;
}
//----------------------------------------------------------------------------
inline bool Rtti::IsExactly (const Rtti& type) const
{
    return (&type == this);
}
e questo il .cpp:

codice:
using namespace Wm5;

//----------------------------------------------------------------------------
Rtti::Rtti (const char* name, const Rtti* baseType)
{
    mName = name;
    mBaseType = baseType;
}
//----------------------------------------------------------------------------
Rtti::~Rtti ()
{
}
//----------------------------------------------------------------------------
bool Rtti::IsDerived (const Rtti& type) const
{
    const Rtti* search = this;
    while (search)
    {
        if (search == &type)
        {
            return true;
        }
        search = search->mBaseType;
    }
    return false;
}
//----------------------------------------------------------------------------

perchè usa un .inl per dichiarare delle funzioni inline?
perchè mette alcune funzioni inline e non tutte?
è solo una delle tante classi del progetto che lo fanno.
perchè?

grazie.