C++の名前空間 2
C++の名前空間 - 檜山正幸のキマイラ飼育記 メモ編の続き。
- using namespace foo; は使わない。std:: であっても。
- その代わり、using foo::something; で個別・明示的な略記を許してもよい。
- または、foo::修飾子を名前に付ける。
- 要するに、無修飾の名前が過度に増えないようにする。無修飾の名前は所在が分かりにくいので。
- ひとつののファイル内で複数の名前空間を使わない。
- トップレベルの名前空間はファイル名かファイルの場所(ディレクトリ)でエンコードする。
最後のルールを補足説明:
ファイルはどれかひとつのトップレベル名前空間に属するので、a.cppはfoo, b.cppはbarというような対応付けが可能。名前空間fooに属するファイルa.cppは、
- foo_a.cpp とファイル名接頭辞を付ける。
- foo/a.cpp にファイルを置く。
のどちらかを採用する。
- 使わない。
- 使ってよいが、クラスと同様な扱いとする。
- 使ってよい。きちんと階層として取り扱う。
三番目の場合は、foo/bar/a.cpp のような物理配置にするか、foo_bar_a.cpp のようなネーミングルールとなる。
まだ試行錯誤は続く。