クライアントがプロセスごとに1つのオブジェクトを作成することだけを希望するクラスがあります。シングルトンの代わりに、より良い方法(私は信じています)は、main()でのみ作成するようにクライアントに指示することです。したがって、自然な強制は、コンストラクターをプライベートにし、main()をフレンドにすることです。
これは次のように機能します。
class A { friend int main(int, char**); A() {} };
int main(int, char **) { A a; }
しかし、クラスAを名前空間に配置する必要がある場合は壊れます。
namepace ns { class A { friend int main(int, char**); A() {} }; }
int main(int, char **) { ns::A a; }
問題はスコーピングです:コンパイラは今考えています
friend int main
名前空間nsのmain()という名前の関数を意味します。したがって、実際のmain()は無関係になります。
だから問題は:これを修正する方法は?もちろん、クラスAを名前空間に入れる必要があります。