これは私をしばらく悩ませている質問ですが、それに対処する最善の方法を見つけることができませんでした. 私は例を通してこれを示そうとしています。
多くのクラスを持つグラフィック ライブラリを開発しています。一部のクラスは、次の 3 つのクラスのように、相互に「一部」の関係にあります。
namespace MyGraphicsLibrary
{
class MatrixStack
{
};
class Transform
{
MatrixStack mMatrixStack;
};
class Renderer
{
Transform mTransform;
};
}
このクラスRenderer
はユーザーが使用するためのものですがTransform
、. 最後の 2 つのクラスはクラス専用であり、ユーザーが使用するものではありません。MatrixStack
MyGraphicsLibrary
Renderer
ここで私は2つのことをしようとしています:
Transform
、MatrixStack
クラスをユーザーから隠します。クラスの「 part-of」階層を反映します。
これを解決するために、次のことを試しました。
私にとっての最善の解決策は、ネストされたクラスがプライベートであり、
Renderer
クラス宣言を見るだけで階層を反映していることをユーザーに示すため、ネストされたプライベートクラスです。次の投稿は、実際にはそれが良い解決策であるかどうかを確信させてくれます:ネストされた C++ クラスと列挙を使用することの長所と短所?をという名前の別の名前空間に入れようとしまし
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; }; }
多分私はここで何かを見逃していますが、どちらが行くべきだと思いますか. 誰もが第3の方法を持っていますか?