質問: こんにちは。どうでも良いことだと言われればそれまでの事なのですが、気になったので質問させてください。 Hogeクラスを名前空間BokeBokeに入れたいと思ったら、 ``` //Hoge.h namespace BokeBoke { class Hoge { //いろいろ... }; } /* namespace BokeBoke */ ``` のように書きますよね?しかしこれだとインデントが1つ増えてしまい、僕はこれが嫌で、 ``` //hoge.h namespace BokeBoke { class Hoge { //いろいろ... }; } /* namespace BokeBoke */ ``` のようにインデントを1つ下げて書いていました。 が、ブロックが入れ子になっているのに { と { が縦に並んでいるのが気になってしまいます。そこで、 ``` //hoge.h namespace BokeBoke { class Hoge; } class BokeBoke::Hoge { //いろいろ... }; ``` のように書けたらいいなと思って試してみると、コンパイルが通りました。しかし、このような書き方をしているコードを見かけたことはありません(人の書いたコードに触れたことがあまりないからかもしれませんが)。この書き方は、c++的にありなのでしょうか?特に、 ``` class BokeBoke::Hoge ``` の部分が気になります。 よろしくお願いします。
回答: > > のようにインデントを1つ下げて書いていました。 > > > これは私は普通にやってますね。 boostとかでもやっているやつはありますね。 ``` //hoge.h namespace hoge1{ namespace hoge2{ namespace hoge3{ class Hoge{ }; } } } ``` ちなみにVisual Studioだとオプションの テキストエディター > C/C++ > 書式設定 > インデント 名前空間のインデントをする をオフにすれば上記のような整形をしてくれます。 なお、c++17では上記は以下のように書けるようになります。 ``` //hoge.h namespace hoge1::hoge2::hoge3{ class Hoge{ }; } ```