Справка по пространству имен C ++ - PullRequest
0 голосов
/ 18 мая 2010

Если у меня есть несколько классов, и я хочу, чтобы все они входили в одно и то же пространство имен, и в моем проекте я просто хочу включить одно, и это даст мне все классы, как мне поступить? Я поиграл с этим, но продолжаю идти в тупик.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

Если вы хотите только одно включение, пространства имен не имеют к этому никакого отношения.

Вы можете создать файл, который содержит только #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 голосов
/ 18 мая 2010

Пространства имен и заголовочные файлы не связаны. Если вы хотите предоставить один заголовочный файл для включения, вы можете либо пойти на совет Тома о добавлении заголовка «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

Обратите внимание, что различие заключается в упаковке: нужно ли вам отправить один или несколько файлов ... в ответе Тома препроцессор сгенерирует файл, аналогичный сгенерированному вручную заголовку, перед передачей содержимого компилятору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...