1

編集:この質問はより広い範囲(使用方法)であるため、これは実際には重複していないようです。とにかく、私の質問への答えは paercebal の答えにあることが判明し、名前空間の構成です。SO のもう 1 つの関連ソースは、 this other questionです。


名前空間を使用してコードをモジュール化しようとしています。ネストされた名前空間に関する質問に対するAnon の回答を見て、単純に名前の衝突を避けるのではなく、それらを設計に使用すべきかどうか疑問に思いました。

名前空間 (場合によってはネストされたもの) はコードを整理するのに便利だと思いますが、world::europe::spain::madrid使用するのが面倒になることは確かです。したがって、API の観点からは、ほとんどのコードを (stdライブラリと同様に) 同じ名前空間に配置するのが最適です。

私の質問は2つあります。

  1. コードを整理するため、または単に名前の競合を避けるために、名前空間を使用する必要がありますか? そしてそうならば

  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;
}
4

0 に答える 0