En C ++, comment puis-je rendre typedefs visible pour tous les fichiers de mon projet?
J'ai un typedef
typedef unsigned int my_type;
utilisées dans un fichier. Je tiens à le rendre visible à travers tous mes fichiers, sans
le mettre dans un fichier d'en-tête inclus. Je ne veux pas aller dans le fichier d'en-tête
itinéraire car il se trouve ce sera la seule déclaration dans le fichier d'en-tête
(et il me semble inutile d'ajouter un fichier il suffit pour cela).
Est-il un moyen de faire cela?
Si, au contraire, j'ai eu:
typedef X my_type;
où X est une classe, j'ai besoin d'inclure X. h partout dans le monde et la définition de type à la fin
de X. h ?
source d'informationauteur user231536
Vous devez vous connecter pour publier un commentaire.
Je ne veux pas aller dans le fichier d'en-tête route, car il se trouve ce sera la seule déclaration dans le fichier d'en-tête (et il me semble inutile d'ajouter un fichier il suffit pour cela).
Quel est le problème avec ça? Il semble juste comme inutiles pour éviter la création d'un fichier à tout prix.
Est-il un moyen de faire cela?
Pas pour autant que je suis conscient.
aurais-je besoin d'inclure X. h partout dans le monde et la définition de type, à la fin de X. h ?
Non, mais c'est probablement la meilleure chose. La seule raison pour laquelle vous devriez faire si X est un modèle, et vous avez besoin de modèles dans les en-têtes de toute façon.
Pas moyen de contourner cela autant que je peux voir. Pourquoi ne pas faire un globals.h fichier d'en-tête avec juste les déclarations que vous voulez, partout, et de l'inclure?
Ne pas être tenté d'enterrer votre typedef quelque part et espérons que "puisque tout le reste se bloque à l'en-tête' que ça va être aussi bon que l'ajout d'un mondial-tête - c'est une très mauvaise pratique d'avoir des en-têtes qui ne sont pas autonomes.
Aussi, pour éviter d'encombrer l'espace de noms global de créer votre propre:
De cette façon, vous pouvez utiliser votre globales dans une belle épuré façon:
Je voudrais utiliser le fichier d'en-tête route, c'est pas si mal.
Non, vous n'auriez pas besoin de l'inclure X. h partout, juste dans les endroits où vous utilisez la définition de type.
Non, il n'y a pas moyen de contourner besoin d'avoir de la définition de type dans un fichier d'en-tête est inclus partout où vous en avez besoin, mais non, vous n'avez pas nécessairement besoin d'inclure également les
X.h
fichier dans le second cas.Si vous avez
Et
X
est une classe, vous pouvez le faire (dans un en-tête autre queX.h
):Qui déclare à X, puis crée un alias de type. Ensuite, ont
X.h
inclure ce fichier.Alors, si vous avez seulement besoin du incomplète typename
my_type
vous pouvez inclure le très court typedef fichier d'en-tête, et vous avez seulement besoin d'inclureX.h
lorsque vous avez besoin d'une définition complète de laX
classe de toute façon.Déclarer que quelque chose (par exemple. une classe, d'une définition de type, fonction) dans une unité de traduction (par exemple. fichier cpp) est en fait quasiment un standard façon de dire "ce n'est utilisé dans ce fichier", parce que il est impossible de référence à partir d'autres fichiers. Les unités de traduction n'ai aucune idée des uns et des autres existance, autres que les déclarations (par exemple. prototypes) partagé par .h de fichiers qui ne disent rien de la mise en œuvre. C'est le linker qui prend toutes les implémentations et les colle ensemble dans un fichier binaire.
Si vous voulez qu'il soit visible à l'extérieur du fichier - le mettre dans un .h de fichier et de les inclure. Comme d'autres réponses ont suggéré, d'une commune ou mondial .h fichier peut être utile. Certains compilateurs qui rendent l'utilisation des en-têtes précompilés faire ce facile de le mettre dans l'en-tête précompilé.