簡體   English   中英

在命名空間內定義一個 function 或限定?

[英]Define a function inside a namespace or qualified?

我在我們的代碼庫中看到了兩個 styles。 簡單的問題:更喜歡什么?

void
someNsName::someFunc( int a, int b )
{/*...*/}

void
someNsName::someOtherFunc( int c )
{/*...*/}

或者

namespace someNsName {
void
someFunc( int a, int b )
{/*...*/}

void
someOtherFunc( int c )
{/*...*/}
} // NS someNsName

我個人更喜歡后者,尤其是當您必須從someNsName中獲得很多資格時。 但是還有更多的原因嗎?

兩者最大的區別是function不能用限定名聲明。

// header
namespace foo {
    void bar(int);
}

// implementation
namespace foo {
    void bar(long) {
    } 
}

我在參數列表中犯了一個錯誤。 它聲明了一個重載,而不是我想要的 function。 問題只會在鏈接期間被發現。 這還不錯,但仍然需要一些時間才能真正彈出。 如果我把實現寫成

void foo::bar(long) {
}

編譯實現文件時會立即出現編譯器錯誤。 之前在foo中聲明的沒有這樣的 function ,所以我無法定義它。

對於長名稱空間列表,人們總是可以這樣做

namespace impl = some::other::ns;

void impl::bar() {}

我認為這是兩種方法之間最重要的區別。 但同樣,styles 都有(不同的)優點,所以只要我們保持一致,任何一個都可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM