2010-09-12 1 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

+0

@LukeN: Как упоминалось ниже Лима Бинс, это вопрос предпочтения и последовательности. Я предпочитаю, и хотел бы думать, что я последовательно использую первый метод. Я мог бы сделать так, чтобы быть явным (как и в вашем коде), вероятно, является самым надежным, поскольку он явно требует от разработчика писать то, что они означают, а не быть более неявным. Недостатком является то, что он требует большего набора текста и, как таковой, может привести к раннему артриту запястья и пальцев или, возможно, синдрому туннеля в области рубля;) – andand

+1

@ LukeN: Я также предпочитаю обертывание, обратите внимание, что метод 'use' нахмурился (даже в исходные файлы). –

2

Не думаю, что это действительно вопросов, и я не думаю, что есть глобальный стандарт, так или иначе. Важно следить за остальной частью вашей кодовой базы и делать то же самое.

Лично я предпочитаю, чтобы обернуть мою реализацию в пространстве имен, как так:

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

Это, кажется, сообщить мне, что я определяю и реализации тестового пространства имен, а не просто «с помощью» его.

Смежные вопросы