編集:この質問はより広い範囲(使用方法)であるため、これは実際には重複していないようです。とにかく、私の質問への答えは paercebal の答えにあることが判明し、名前空間の構成です。SO のもう 1 つの関連ソースは、 this other questionです。
名前空間を使用してコードをモジュール化しようとしています。ネストされた名前空間に関する質問に対するAnon の回答を見て、単純に名前の衝突を避けるのではなく、それらを設計に使用すべきかどうか疑問に思いました。
名前空間 (場合によってはネストされたもの) はコードを整理するのに便利だと思いますが、world::europe::spain::madrid
使用するのが面倒になることは確かです。したがって、API の観点からは、ほとんどのコードを (std
ライブラリと同様に) 同じ名前空間に配置するのが最適です。
私の質問は2つあります。
コードを整理するため、または単に名前の競合を避けるために、名前空間を使用する必要がありますか? そしてそうならば
APIをきれいに保ちながら「複雑な」名前空間構造を持つにはどうすればよいですか?
質問 2 に関しては、次の戦略を使用しています。
(1) 独自の名前空間を持つコードを持つ
//mathlib.h
namespace mathlib {
int sum( int a, int b ) {
return a + b;
}
}
(2) 別の名前空間に持ち込む
//otherlib.h
#include <iostream>
#include "mathlib.h"
namespace otherlib {
using namespace mathlib; // lookup stuff inside mathlib
void print(int n) {
std::cout << "the int is " << n << "!";
}
}
(3)名前空間sum
の下にあったので、実際に呼び出すことができます。otherlib
#include "otherlib.h"
int main(){
auto myint = otherlib::sum(1, 2);
otherlib::print(myint);
return 0;
}