ciao.
Ho questa classe di esempio:
header:
codice:
// Geometric Tools, LLC
// Copyright (c) 1998-2010
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/Licens...ICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)
#ifndef WM5RTTI_H
#define WM5RTTI_H
#include "Wm5CoreLIB.h"
namespace Wm5
{
class 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"
}
//----------------------------------------------------------------------------
#define WM5_DECLARE_RTTI \
public: \
static const Rtti TYPE; \
\
virtual const Rtti& GetRttiType () const \
{ \
return TYPE; \
}
//----------------------------------------------------------------------------
#define WM5_IMPLEMENT_RTTI(nsname, baseclassname, classname) \
const Rtti classname::TYPE(#nsname"."#classname, &baseclassname::TYPE)
//----------------------------------------------------------------------------
#endif
cpp:
codice:
// Geometric Tools, LLC
// Copyright (c) 1998-2010
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/Licens...ICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)
#include "Wm5CorePCH.h"
#include "Wm5Rtti.h"
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;
}
//----------------------------------------------------------------------------
e .inl
codice:
// Geometric Tools, LLC
// Copyright (c) 1998-2010
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/Licens...ICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)
//----------------------------------------------------------------------------
inline const char* Rtti::GetName () const
{
return mName;
}
//----------------------------------------------------------------------------
inline bool Rtti::IsExactly (const Rtti& type) const
{
return (&type == this);
}
//----------------------------------------------------------------------------
perchè separa l'implementazione di alcuni membri in un file .inl con funzioni inline?
quando è meglio usare le funzioni inline?
grazie.