Включение пространства имен C ++ в файлы .cc - PullRequest
2 голосов
/ 08 сентября 2010

Я объявил класс X в Xh следующим образом:

namespace Foo {
 class X{
....
};

}

В X.cc я хотел бы определить конструкторы, методы для X.

Нужно ли заключатьвсе мои определения внутри namespace Foo {...} или префикс X как Foo :: X :: для каждого метода?

Кажется, что иногда я могу просто сказать (используя пространство имен Foo) и не упоминать его снова, то есть просто определить методыкак X :: X () {...}

Какой здесь правильный подход?

Ответы [ 2 ]

4 голосов
/ 08 сентября 2010

Любой из трех предложенных вами подходов сработает.Дано:

namespace N {
    struct S {
        int F();
    };
}

Вы можете поместить определение в блок пространства имен:

namespace N {
    int S::f() { return 42; }
}

Вы можете указать имя члена с именем пространства имен:

int N::S::f() { return 42; }

Или вы можете использовать директиву using (хотя я бы не рекомендовал это):

using namespace N;
int S::f() { return 42; }

Как правило, я бы рекомендовал не использовать директиву using.Что касается двух других (использование блока пространства имен или уточнение имен), я не думаю, что это действительно имеет значение.Я делаю оба в моем коде.

0 голосов
/ 08 сентября 2010

Нет, вам не нужно использовать namespace Foo {...} при определении класса.Все ваши подходы верны, но лично я предпочел бы следующее:

// In FOO.h
namespace FOO
{
 class A
 {
 public:
  A();
 };
}

И реализация:

// In FOO.cpp
#include "Foo.h"
FOO::A::A()
{
 cout<<endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...