這是一個困擾我一段時間的問題,但找不到處理它的最佳方法。我試圖通過一個例子來展示這一點。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; }; }
也許我錯過這裏的東西,但你怎麼想哪一個是要走的路。 有沒有人有第三種方式?
謝謝你的時間,我去與jmihalicza雖然 – Avithohol 2013-05-06 15:17:09