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

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

C++の名前空間 3

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

次の2つの用途に限定しよう。

  1. 名前付きの構成素を大分類する。
  2. インスタンスを必要としないクラスのように使う。

大分類はトップレベルの名前付き名前空間名前空間の名前は、英小文字のみ短い名前。

「クラス代わり」とは、関数を入れる器としてだけクラスを使うなら、代わりに名前空間を使う、ということ。命名はやはり英小文字のみ短い名前。

大分類名前空間空間は、すべてのファイルに適用するので、ソースは次の形になる。

// foo_hoge.h

// includeなど

namespace foo {

// ...

} // foo

実装側

// foo_hoge.cpp

// includeなど
#include "foo_hoge.h"

namespace foo {

// ...

} // foo

そのファイル(の中身の名前)がどの名前空間に属するかは、ファイル名接頭辞でわかるようにする。入れ子名前空間は、クラス代わり(関数の入れ物)なので、ファイル名接頭辞にエンコードする必要はない。

  • ファイル名を接頭辞で分類することと、名前を名前空間で分類することが同じになる。
  • すべての名前がどれかのトップレベ名前空間に所属する。
  • この大分類は入れ子にしない。フラットな一段階の分類。
  • ヘッダーファイルと実装ファイル(cppファイル)は常にペアになる。
  • cppファイルを伴わないヘッダーファイルは出てくる。別にかまわない。
  • ヘッダーファイルを伴わないcppファイルは禁止する。つうか、出てこない。