2010-05-18 4 views
0

Si j'ai plusieurs classes et que je veux les avoir toutes sous le même espace de noms et dans mon projet, je veux juste en avoir une et cela me donnera toutes les classes comment je ferais ça ? J'ai joué avec ça mais continue à frapper une impasse.Aide pour les espaces de noms C++

Merci d'avance.

Répondre

4

Si vous ne voulez qu'une seule inclusion, les espaces de noms n'ont rien à voir avec cela.

Vous pouvez créer un fichier contenant uniquement des instructions #include.

Quelque chose comme ceci:

//classes file 
#include "classA" 
#include "classB" 
#include "classC" 

Et comprennent tous avec un seul comprend

#include "classes"

Un exemple concret peut être trouvé dans la STL.

Prenez vector par exemple:

#ifndef _GLIBCXX_VECTOR 
#define _GLIBCXX_VECTOR 1 

#pragma GCC system_header 

#include <bits/stl_algobase.h> 
#include <bits/allocator.h> 
#include <bits/stl_construct.h> 
#include <bits/stl_uninitialized.h> 
#include <bits/stl_vector.h> 
#include <bits/stl_bvector.h> 

#ifndef _GLIBCXX_EXPORT_TEMPLATE 
# include <bits/vector.tcc> 
#endif 

#ifdef _GLIBCXX_DEBUG 
# include <debug/vector>               
#endif 

#endif /* _GLIBCXX_VECTOR */ 

Vous obtenez tout cela simplement en faisant #include <vector>

0

espaces de noms et les fichiers d'en-tête ne sont pas liés. Si vous voulez fournir un seul fichier d'en-tête pour inclusion, vous pouvez utiliser l'en-tête 'include-all' de Tom ou vous pouvez placer tous vos en-têtes dans un seul fichier (ceci peut être une mauvaise idée sauf si le code est vraiment stable, car un changement dans un seul élément forcera à tout recompiler). Quoi qu'il en soit, vous pouvez utiliser différents espaces de noms dans le même en-tête:

#ifndef HEADER_GUARD_H_ 
#define HEADER_GUARD_H_ 
namespace A { 
    class TheA {}; 
} 
namespace B { 
    class TheB {}; 
} 
namespace A { // you can even reopen the namespace 
    class AnotherA {}; 
} 
#endif 

Notez que la différence est l'emballage: si vous avez besoin d'expédier un ou plusieurs fichiers ... dans la réponse de Tom préprocesseur va générer un fichier similaire à la En-tête généré manuellement avant de transmettre le contenu au compilateur.

Questions connexes