Пространства имен могут быть непрерывными. Вы можете воспользоваться этим, сохранив соответствующие классы в вашем 2DEngine.h, который, вероятно, будет использоваться клиентским кодом и будет поставляться как часть вашей библиотеки.
Все остальное, что не должно быть открыто внешнему миру, все еще может быть помещено в то же пространство имен, но в отдельный заголовочный файл (который не поставляется).
Заголовок H1.h (часть интерфейса библиотеки с внешним миром)
namespace TwoEngine
{
class Canvas
{
// Define all of Canvas here
};
}
Заголовок H2.h (не является частью интерфейса библиотеки с внешним миром)
#include "H1.h"
namespace TwoEngine // reopen the namespace and extend it
{
class Primitive
{
// Define all of Primitive here
};
}