名前空間(namespace)について
スコープ
宣言された識別子はある一定の範囲からのみ使うことが出来る
識別子は変数の名前、型の名前など
その「範囲」をスコープという
同じスコープには実態の異なる複数の識別子を導入してはいけない
実態が同じ場合は同じ識別子を複数回宣言してもよい
定義は複数回してはいけない(One difinition rule(ODR))
変数の宣言は殆どの場合、定義も同時に行われることに注意
関数の場合はオーバーロードになる場合に限って同じ識別子でも複数の実態を持てる
名前空間とは
スコープでありカプセル化を行う機能である。
大きなプログラムを書くときや、ライブラリを作成/使用する際には名前の衝突がしばしば起きるが、それを回避する手段を提供する
特に一般的な短い英単語はその使いやすさや多義から衝突し易い
多くのライブラリは、そのライブラリ名を名前空間に使用する
Siv3Dはs3dという名前空間がある
更に、大きいライブラリではその中で機能毎やバージョン毎に名前空間をネストすることが多い
Siv3DではMath,Unicodeなどなど
(あまりカプセル化という言い方は名前空間には使わない気がするが、確かにそういう機能も果たす)
名前空間はスコープであるので、
同一の名前空間内では、識別子が被ってはいけない
異なる名前空間同士では識別子が被っても問題ない
名前空間は名前空間の中にネストすることが出来る
名前空間に含まれないトップレベルの名前空間はグローバル名前空間と呼ぶ
使い方