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

这似乎传达给我,我确定并实施测试的命名空间,而不仅仅是“使用”它。