ciao.
Ho questa classe di esempio:
header:
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) #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
e .inlcodice:// 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; } //----------------------------------------------------------------------------
perchè separa l'implementazione di alcuni membri in un file .inl con funzioni inline?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); } //----------------------------------------------------------------------------
quando è meglio usare le funzioni inline?
grazie.

Rispondi quotando