2010-05-18 134 views
0

如果我有多个类,我想让它们都在同一个命名空间下,并且在我的项目中,我只想包含一个,并且这会给我所有的类,我将如何去做这件事?我一直在玩这个,但一直都是死路一条。C++命名空间帮助

在此先感谢。

回答

4

如果你只想要一个包含,命名空间与此无关。

您可以创建仅包含#include语句的文件。

事情是这样的:

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

而且包括所有的人都只有一个包括

#include "classes"

一个真实的例子可以在STL中找到。

vector例如:

#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 */ 

您可以通过只是在做#include <vector>

0

命名空间和头文件无关得到这一切。如果你想提供一个包含头文件的文件,你可以根据Tom的建议添加一个'include-all'头文件,或者你可以将所有头文件打包成一个文件(这可能是个坏主意,除非代码库真的是真的稳定,因为单个元素的变化将强制重新编译所有内容)。

#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 

注意,所不同的是包装:是否需要运送一个或多个文件......在汤姆的回答预处理会产生类似文件反正你可以在相同的标题中使用不同的命名空间在将内容传递给编译器之前手动生成头文件。