3

静的関数/変数の動作と同様に、クラス/列挙型に同じファイル内でのみアクセスできるようにする方法はありますか?

// free-floating static function
// basically I want similar access restrictions on helper-type classes/enums
static void func(void)
{
}

// this is a compiler error
static class A
{
};
4

2 に答える 2

9

無名の名前空間内で宣言されたクラスは、あなたが望むものです:

namespace
{

class SomeClass { };

}

これは、その翻訳単位の外ではアクセスできないように、コンパイラによってマングルされた名前が付けられます。

于 2013-01-13T08:37:49.063 に答える
7

無名の名前空間内で宣言するだけです。

static変数のスコープを同じ翻訳単位に制限するための の使用は、変数の宣言と関数にのみ適用でき、ユーザー定義型には適用できないという事実によって制限されることに注意してください。

名前のない名前空間はこの欠点を取り除き、同じ翻訳単位のスコープでユーザー定義型を定義できるようにします。

リンクされた MSDN から:

名前のない名前空間は、変数の静的宣言の優れた代替品です。これにより、変数と関数を翻訳単位全体で表示できますが、外部からは表示できません。名前のない名前空間内のエンティティは外部リンケージを持っている可能性がありますが、それらは翻訳単位に固有の名前によって効果的に修飾されているため、他の翻訳単位からは決して見ることができません。

于 2013-01-13T08:34:52.160 に答える