{3月14日}{希哲13年3月}{希哲13年3月14日}{希哲13年3月14日のツイスト}{namespace}{Cμ の名前空間}{ns}{C++ における名前空間}{C++}(9)

{あれ K#F85E/4686-DA05}

ただ,これは では namespacens で表現出来るのが大きくて,伝統的な C++ なら namespace a { namespace b { ... と書くところが ns a { ns b { ... で済んだ。

{希哲13年3月13日}{希哲13年3月13日のツイスト}{ツイスト}{C++ における名前空間}(4)

{あれ K#F85E/4686-8C5B}

一つだけ微妙だったところは namespace a::b::c みたいな宣言が出来ないことだったのだが,実はこの表記にも問題があって,例えば b の下に何かを追加したい時に柔軟性が無い。一見冗長だが,入れ子表記も簡単に展開出来てそれはそれで便利だったりする。

{希哲13年3月13日}{希哲13年3月13日のツイスト}{ツイスト}{名前世界}{ADL}{}{C++ における名前空間}(7)

{あれ K#F85E/4686-ACCE}

C++ の名前空間って結構馬鹿にされている印象があるが,実は の基礎として C++ を選んだ時の主な理由は,名前空間や ADL も含めて大規模な名前の構造化が可能だったことがある。私が「名前世界」(nameworld)と呼んでいた網羅的な名前体系を実現出来る環境だった。

{希哲13年3月13日}{希哲13年3月13日のツイスト}{ツイスト}{C++ における名前空間}{C++}(5)

{あれ K#F85E/4686-4CA0}

例えば,::foo::std::bar という変数があると ::foo::bar() という函数からは std::bar で参照出来る。誰が作んねんという話ではあるけど。

{希哲13年3月13日}{希哲13年3月13日のツイスト}{ツイスト}{相対場筋}{C++ における名前空間}{C++}(6)

{あれ K#F85E/4686-2359}

あと,久しぶりにこの辺の調べものをしていて思い出したのだが,C++std:: を前に付けたところで実は全然厳格じゃない気がする。相対場筋(パス)みたいなものなので……std という文字列自体が予約されていれば問題無いとは思うが。

{希哲13年3月13日}{::xtd::}{::std::}{希哲13年3月13日のツイスト}{C++ 標準}{ツイスト}{C++ における名前空間}(7)

{あれ K#F85E/4686-E677}

:std:: をあれこれ弄ろうとしたのだが,明示的に禁止されてはいないとはいえ,C++ 標準 との相互運用性等を考えるとこれは避けた方がいいだろうし,:xtd:: って意外とよく考えた命名だなと思った。

{匿名空間}{悪訳}{ファイル スコープ}{C++ における名前空間}{素描}(5)
{C++ における名前空間}

{}