2

私は静的ライブラリを作成しています。その中で定義されているものはすべて1つの名前空間にあります。しかし、クラスのようにメソッドを定義する必要があるのか​​、それとも名前空間でメソッドをラップする必要があるのか​​わかりません。私が求めているのは:

これは有効ですか:

MyThings.h

namespace MyThings {
    void DoStuff();
    void DoOtherStuff();
}

MyThings.cpp

namespace MyThings {
    void DoStuff() {
        // Do this.
    }

    void DoOtherStuff() {
        // Do that.
    }
}

または、メソッドをクラス分けするように定義する必要がありますか?:

MyThings.cpp

void MyThings::DoStuff() {
    // Do this.
}

void MyThings::DoOtherStuff() {
    // Do that.
}

を使用したくないし、最初の例が有効である場合はそれを使用したいので、すべてのメソッド識別子の前using namespace MyThings;に使用しなくてもコードが読みやすくなると思います。MyThings::

4

1 に答える 1

9

どちらも有効なので、好みに合わせて自分のスタイルを選ぶことができます。

以下を使用して関数を定義することには、宣伝されている利点があります。

void MyThings::DoStuff() {
    // Do this.
}

つまり、それを行うには、関数がすでに宣言されている必要があります。したがって、次のようなエラーが発生します。

void MyThings::DoStuf() {
    // Do this.
}

また

void MyThings::DoStuff(int i) {
    // Do this.
}

コンパイルするとキャッチされますMyThings.cpp。定義する場合

namespace MyThings {
    void DoStuff(int i) {
        // Do this.
    }
}

そうすれば、通常、別のソースファイル内の誰かが関数を呼び出そうとし、リンカが文句を言うまで、エラーは発生しません。明らかに、テストがごみでない場合は、何らかの方法でエラーをキャッチしますが、多くの場合、リンカーよりも早いほうが優れており、コンパイラーからより良いエラーメッセージが表示される可能性があります。

于 2012-10-05T10:23:34.060 に答える