La plupart de mes classes ont des méthodes inline : Get/Set, operateurs, constructeurs simples, etc. Par souci de lisibilité j'ai l'habitude de séparer leur implémentation de la déclaration de la classe, en les mettant dans un fichier .inl (comme les MFC). Le fichier .inl est inclus à la fin du fichier .h, donc mise à part la considération esthétique c'est exactement la même chose que de coder le corps de la fonction dans la classe elle-même : si une seule fonction inline est modifiée, chaque fichier .cpp incluant cette classe directement ou non va être recompilé, ce qui peut prendre un certain temps dans un gros projet.
//--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.h #ifndef _VECTMAT_H_ #define _VECTMAT_H_ class CVect2D { public: // constructors inline CVect2D (void); inline CVect2D (const float fD); // x=y=fD inline CVect2D (const float fX, const float fY); // x=fX; y=fY [... etc ...] }; #include "VectMat.inl" #endif // _VECTMAT_H_ //--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.inl #ifndef _VECTMAT_INL_ #define _VECTMAT_INL_ inline CVect2D::CVect2D() // ne rien faire {} inline CVect2D::CVect2D(const float fD) // x=y=fD { m_fV[_X_] = m_fV[_Y_] = fD; } inline CVect2D::CVect2D(const float fX,const float fY) // x=fX; y=fY { m_fV[_X_] = fX; m_fV[_Y_] = fY; } [... etc ...] #endif // _VECTMAT_INL_ //--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.cpp #include "stdafx.h" #include "VectMat.h" [... implémentation des méthodes qui ne sont pas inline ...] |
//--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.h #ifndef _VECTMAT_H_ #define _VECTMAT_H_ #ifdef _DEBUG #define INLINE #else #define INLINE inline #endif class CVect2D { public: // constructors INLINE CVect2D (void); INLINE CVect2D (const float fD); // x=y=fD INLINE CVect2D (const float fX, const float fY); // x=fX; y=fY [... etc ...] }; #ifndef _DEBUG #include "VectMat.inl" #endif #endif // _VECTMAT_H_ //--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.inl #ifndef _VECTMAT_INL_ #define _VECTMAT_INL_ INLINE CVect2D::CVect2D() // ne rien faire {} INLINE CVect2D::CVect2D(const float fD) // x=y=fD { m_fV[_X_] = m_fV[_Y_] = fD; } INLINE CVect2D::CVect2D(const float fX,const float fY) // x=fX; y=fY { m_fV[_X_] = fX; m_fV[_Y_] = fY; } [... etc ...] #endif // _VECTMAT_INL_ //--------------------------------------------------------------------------------------------------------------------// // fichier VectMat.cpp #include "stdafx.h" #include "VectMat.h" |