これは、クラスをパブリックまたはプライベートとして定義する方法に関する質問です。
現在、名前空間内にさまざまなクラスが定義されており、それらのクラスの一部のみを外の世界に表示/使用できるようにしたいと考えています。
したがって、たとえば、以下のクラスがプログラム内の唯一のものである場合、main.cpp は MyPrivate クラスではなく、MyPublic クラスのみを表示/使用できるようにする必要があります。MyPrivate クラスを private として、MyPublic クラスを public として定義すればこれが達成できると思っていましたが、以下のコードは機能し、main.cpp は MyPrivate オブジェクトを宣言できます。
C++でこれを行うことは可能ですか?
MyPrivate.h:
namespace MyNamespace{
// only classes inside of the MyNamespace should be able
// to use this
private ref class MyPrivate{
...
};
}
MyPublic.h:
#include "MyPrivate.h"
namespace MyNamespace {
// anyone can declare this
public ref class MyPublic{
...
private:
MyNamespace::MyPrivate^ p;
...
};
}
Main.cpp:
#include "MyPublic.h"
int main(){
MyNamespace::MyPublic p_yes; // this is fine
MyNamespace::MyPrivate p_no; // don't want this to be possible
return 0;
}