私は、ソースファイルの "実際の"コードの前に現われる必要がある約1000行のユーティリティクラス定義を含む、古いコードの大した部分を継承しました。また、従来のクラスが関連付けられている可能性のある他のモジュールとの衝突を避けるために、私は無名の名前空間にユーティリティクラスを入れている:コンパイル単位ごとに名前のない名前空間は1つしかありませんか?
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
class ActuallyInteresting {
// uses OldUtils
};
しかし、私は人々が(実際に)に興味があるだろうActuallyInteresting
コードを持っていることを好むだろうファイルの先頭近くに、例えばライン50から始まり、底部で右よりも高い。 horridユーティリティクラスを別のコンパイル単位に分割することはオプションではありません。これは、より高いレベルの理由で私は取り掛かりません!
私は、メソッド定義を持たない短いクラス宣言をファイルの先頭の名前のない名前空間に入れ、もっと長いメソッド定義を別の名前のない名前空間の一番下に置くことが可能かどうか疑問に思っています:
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
}
class ActuallyInteresting {
// uses OldUtils
};
namespace {
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
は、これら二つの「分離」名前の名前空間は、コンパイル・ユニット内の同じ範囲として扱われ、又は異なる一意の名前空間は、それぞれについて生成されますか?標準はこれについて何か言いたいことはありますか?次のコードはコンパイルする場合
各無名の名前空間は(翻訳単位で静的と同じ)、各翻訳単位に固有になります –
DieterLü[email protected]:これがtrueの場合、1回のアクセス別の翻訳単位で無名の名前空間のグローバル変数をどうしますか?他の翻訳単位の名前がスコープ解決テキストに追加されますか? –