2010-05-18 148 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 

注意,所不同的是包裝:是否需要運送一個或多個文件......在湯姆的回答預處理會產生類似文件反正你可以在相同的標題中使用不同的命名空間在將內容傳遞給編譯器之前手動生成頭文件。