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.