2010-09-12 77 views
3

如果一個人有一個頭文件,假設「test.h」包括命名空間中定義和實施

namespace test 
{ 
    enum ids 
    { 
     a = 1, 
     b = 2, 
     c = 3, 
     d = 30 
    }; 

    char *names[50]; 
}; 

和源文件,「test.cc」基本上只包括

test::names[test::a] = "yum yum"; 
test::names[test::c] = "pum pum"; 
// ... 

將命名空間中的實現封裝起來會更有意義嗎?

我會說,因爲它畢竟是頭文件的實現,因此將實現包含在與頭相同的名稱空間中是有意義的,而不必手動爲每個變量添加前綴test::,並在使用前綴來自外部的價值。

這是C++新手的觀點,聰明人在這裏會說些什麼?

回答

4

您也可以在test.cc中指定命名空間。要做到這一點,你會做這樣的事情:

#include "test.h" 

namespace test 
{ 
    ... 
    names[a] = "yum yum"; 
    names[c] = "pum pum"; 
    ... 
} 

你可以交替使用using爲:

#include "test.h" 

using test; 

... 
names[a] = "yum yum"; 
names[c] = "pum pum"; 
... 

我一般用第一種方法。

+0

是的,我知道你可以這樣做..這只是一個問題,「這是否是好的做法,或者你是否更好的手動添加前綴」:) – LukeN 2010-09-12 16:07:04

+0

@LukeN:作爲利馬豆下面提到,這是一個問題的偏好和一致性。我更喜歡,並且想認爲我一貫使用第一種方法。我可以將案例明確化(就像你在代碼中一樣),這可能是最合理的,因爲它明確要求開發人員寫出他們的意思,而不是更隱含。缺點是它需要更多的打字,因此可能會導致手腕和手指的早期關節炎或可能導致心皮隧道綜合徵;) – andand 2010-09-13 03:12:40

+1

@LukeN:我也贊成包裝,請注意'使用'方法是皺眉(即使在源文件)。 – 2010-09-13 08:33:01

2

我不認爲它真的事情,我不認爲有一種方式或其他的全球標準。重要的是要與代碼庫的其他部分保持一致,並以同樣的方式進行。

就個人而言,我喜歡我的包裹實施了命名空間,如下所示:

namespace test 
{ 
    names[a] = "yum yum"; 
    names[c] = "pum pum"; 
} 

這似乎傳達給我,我確定並實施測試的命名空間,而不僅僅是「使用」它。