De l'importance d'une .inl fichier en C++
Quels sont les avantages d'avoir des déclarations dans un .inl fichier? Quand aurais-je besoin pour utiliser le même?
- FWIW, je déteste .inl fichiers. Pourquoi diviser votre code plus que nécessaire?
- Pour seporate interface de mise en œuvre. J'ai toujours détesté le C# et Java fichier, car il est si difficile de lire l'interface à cause de toutes les messey détails de mise en œuvre.
- malheureusement, C++ nous donne une mauvaise combinaison de deux mondes - l'interface et une partie de la mise en œuvre dans l'en-tête, le reste de la mise en œuvre dans le .fichier cpp. Même si vous évitez les fonctions inline (ou de les mettre dans .inl fichiers) que vous avez à encombrer l'interface avec les satanés détails de membres privés, sauf si vous êtes en mesure de religieusement utiliser le pimpl idiome.
- Ouais, je n'ai jamais compris l'argument que les en-têtes de séparer l'interface de l'application. Il est évident qu'ils n'en ont pas. Une interface ne doit pas contenir tous les membres privés.
- Pour être juste, Java/C# a de très bonnes outillage d'assurer l'interface contour automatiquement. On pourrait le mettre dans l'autre sens: En C++, vous devez manuellement résoudre un problème, qui peut être entièrement résolu par des ordinateurs.
Vous devez vous connecter pour publier un commentaire.
.inl
les fichiers ne sont jamais obligatoires et n'ont pas de signification particulière pour le compilateur. C'est juste une façon de structurer votre code qui fournit un indicateur de l'homme qui pourraient le lire.- Je utiliser
.inl
fichiers dans deux cas:Dans les deux cas, j'ai mis les déclarations des fonctions dans un fichier d'en-tête, qui est inclus par d'autres fichiers, puis j'ai
#include
la.inl
fichier en bas de l'en-tête de fichier.Je l'aime parce qu'il se sépare de l'interface à partir de la mise en œuvre et rend le fichier d'en-tête un peu plus facile à lire. Si vous vous souciez de la mise en œuvre de détails, vous pouvez ouvrir le
.inl
fichier et de le lire. Si vous ne le faites pas, vous n'avez pas à..tcc
pour le modèle fichiers de mise en œuvre.Nick Meyer est droit: Le compilateur ne se soucie pas de l'extension du fichier que vous êtes, y compris, donc, des choses comme ".h", ".hpp", ".hxx", ".hh", ".inl", ".inc.", etc. sont une simple convention, afin de rendre clair ce que les fichiers est censé contenir.
Le meilleur exemple est la STL fichiers d'en-tête qui n'ont pas d'extension que ce soit.
Généralement, ".inl" les fichiers ne contiennent inline code (d'où le ".inl" extension).
Ces fichiers ".inl" les fichiers sont une nécessité lorsque vous avez un cycle de dépendance entre header code.
Par exemple:
Et:
Il n'y a aucun moyen que vous aurez à rassembler, y compris à l'aide de déclaration anticipée.
La solution consiste alors à décomposer la définition et la mise en œuvre dans deux types de fichiers d'en-tête:
hpp
pour l'en-tête de déclaration/définitioninl
pour l'en-tête de la mise en œuvreQui se décompose dans l'exemple suivant:
Et:
Et:
Et:
De cette façon, vous pouvez comprendre ce que ".inl" fichier dont vous avez besoin dans votre propre source, et il va fonctionner.
Encore une fois, le suffixe des noms de fichiers ne sont pas vraiment important, seulement leurs utilisations.
Puisque personne d'autre n'a mentionné:
L'utilisation de .inl fichiers pour stocker vos fonctions en ligne peut être utile pour accélérer les compile.
Si vous incluez uniquement les déclarations.h) où vous avez besoin de déclarations, et seulement inclure des implémentations (.inl) où vous en avez besoin ( c'est à dire probablement que dans .le rpc et d'autres .inl fichiers, pas .h ), il peut avoir un effet bénéfique sur votre en-tête de dépendances.
Cela peut être une importante victoire sur les grands projets avec de nombreux interaction classes.
Dans mon expérience .inl fichiers sont utilisés pour définir les fonctions inline. Quand ils sont dans un .inl fichier, le fichier peut être inclus dans un en-tête pour obtenir les fonctions inline et dans un .fichier c à obtenir régulièrement des définitions de fonction.
De cette façon, la même source peut travailler plus facilement avec les compilateurs qui n'ont pas de fonction inline supportas ainsi que les compilateurs qui ne.
Ils sont généralement utilisés avec directement le code en C, pas souvent avec du code C++ que tous les compilateurs C++ soutien des fonctions inline.
#define inline static
, et de définir vos fonctions inline dans l'en-tête.Je crois que c'est juste une convention de nommage pour un "en-tête" fichier contient le code en ligne.
c'est ainsi que .h les fichiers peuvent contenir des définitions et .inl fichiers contiennent en ligne de code qui est nécessaire pour les modèles.
Je ne pas croire n'est rien de plus qu'une convention de nommage pour faire de la finalité du fichier clair