名前のない名前空間を使用します:
namespace stuff
{
int repair(firstObj obj);
namespace
{
int doSomethingElse();
privateObj obj;
}
}
ここから[強調鉱山]:
名前のない名前空間は、変数の静的宣言の優れた代替品です。
これにより、変数と関数を翻訳単位全体で表示できますが、外部からは表示できません。名前のない名前空間内のエンティティは外部リンケージを持っている可能性がありますが、それらは翻訳単位に固有の名前によって効果的に修飾されているため、他の翻訳単位からは決して見ることができません。
この関連する質問も参照してください:名前のない/匿名の名前空間と静的関数
編集:それは私たちが話しているヘッダーファイルであることに注意してください:
この場合、関数 doSomethingElse() とオブジェクト obj に、このファイルで宣言されたクラスのみがアクセスできるようにします。
次に、これらのメソッドとオブジェクトをパブリック ヘッダー ファイルで最初に宣言するのではなく、特定の実装ファイルで宣言する必要があります。
次に、名前のない名前空間を使用して、到達可能性を効果的に制限します (たとえば、誰かが誤って同じ識別子を使用して別の宣言を提供した場合)。
ヘッダー ファイルに残しておくと、匿名の名前空間と 1 つの定義規則(ヘッダーが複数の翻訳単位に含まれている場合)が発生する可能性があります。