このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

C++の名前空間 2

C++の名前空間 - 檜山正幸のキマイラ飼育記 メモ編の続き。

  • using namespace foo; は使わない。std:: であっても。
  • その代わり、using foo::something; で個別・明示的な略記を許してもよい。
  • または、foo::修飾子を名前に付ける。
  • 要するに、無修飾の名前が過度に増えないようにする。無修飾の名前は所在が分かりにくいので。
  • ひとつののファイル内で複数の名前空間を使わない。
  • トップレベルの名前空間はファイル名かファイルの場所(ディレクトリ)でエンコードする。

最後のルールを補足説明:

ファイルはどれかひとつのトップレベ名前空間に属するので、a.cppはfoo, b.cppはbarというような対応付けが可能。名前空間fooに属するファイルa.cppは、

  1. foo_a.cpp とファイル名接頭辞を付ける。
  2. foo/a.cpp にファイルを置く。

のどちらかを採用する。

問題は入れ子名前空間だ、選択肢は:

  1. 使わない。
  2. 使ってよいが、クラスと同様な扱いとする。
  3. 使ってよい。きちんと階層として取り扱う。

三番目の場合は、foo/bar/a.cpp のような物理配置にするか、foo_bar_a.cpp のようなネーミングルールとなる。

まだ試行錯誤は続く。