Это вопрос, который немного беспокоит меня, но не смог найти лучший способ справиться с этим. Я пытаюсь показать это на примере.C++ пространство имен и иерархия классов
Я разрабатываю графическую библиотеку со многими классами. Некоторые из классов «части» отношений друг с другом, как этот 3 класс:
namespace MyGraphicsLibrary
{
class MatrixStack
{
};
class Transform
{
MatrixStack mMatrixStack;
};
class Renderer
{
Transform mTransform;
};
}
Renderer
класса для пользователей, чтобы использовать, но я не хочу, чтобы они видели Transform
, MatrixStack
классов, когда они ищут MyGraphicsLibrary
. Последние два класса предназначены только для класса Renderer
, а не для пользователей.
Здесь я пытаюсь сделать две вещи:
Скрытие
Transform
,MatrixStack
классы от пользователей.Отразить "часть" иерархия классов.
Я попробовал следующее, чтобы решить эту проблему:
Лучшее решение для меня было бы частные вложенные классы, как это было бы показать пользователю, что вложенный класс является частным, а также отражает иерархию, если вы просто посмотрите на объявление класса
Renderer
. Следующий пост на самом деле заставляет меня неопределенным, что является хорошим решением: Pros and cons of using nested C++ classes and enumerations?Я пытался поставить
Transform
,MatrixStack
в другое пространство имен называетсяPrivate
. Таким образом, пользовательский поискMyGraphicsLibrary
пространства имен будет содержать пространство именPrivate
, охватывающее все классы, которые не предназначены для пользователей. Это хорошо, но есть много других классов с той же проблемой, и я быстро заполняю пространство именPrivate
классами, которые не имеют никакого отношения друг к другу. Здесь я только мог придумать уродливые решения, как вводящие вложенных пространства имен:namespace MyGraphicsLibrary { //private classes belonging to Renderer class namespace PrivateRenderer { class MatrixStack { }; class Transform { MatrixStack mMatrixStack; }; } //public classes for users class Renderer { Transform mTransform; }; }
Может быть, я что-то пропустил здесь, но что вы думаете, какой из них является путем. Есть ли у кого-то третий способ?
Спасибо, я отмечаю это как ответ, поскольку он предлагает больше вариантов. Раньше я читал о pimpl, но мне кажется, что мне нужно в это время заглянуть. – Avithohol