命名空间的定义和实现

时间:2010-09-12 15:35:40

标签: c++

如果有一个头文件,让我们说“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 ++新秀的观点,聪明人会在这里说些什么?

2 个答案:

答案 0 :(得分: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"; 
...

我通常使用第一种方法。

答案 1 :(得分:2)

我不认为真的很重要,我不认为有这样或那样的全球标准。重要的是与代码库的其余部分保持一致,并以同样的方式执行。

就个人而言,我更喜欢将我的实现包装在命名空间中,如下所示:

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

这似乎告诉我,我正在定义和实现测试命名空间,而不仅仅是“使用”它。