Допустимо ли добавлять «использование пространства имен» сразу после объявления пространства имен? - PullRequest
1 голос
/ 11 февраля 2009

У меня есть небольшое пространство имен, содержащее некоторые определения типов, которые я использую, чтобы мой код выглядел чище. Однако я не хочу добавлять строку «using namespace ...» в каждый файл, который использует один из этих типов, ведь мне уже нужно добавить #include для файла.


MyFile.cpp:

#include "typedefs.h"
void Bob()
{
    IntList^ list = gcnew IntList;
}

typedefs.h:

namespace Typedefs
{
    typedef List<int> IntList;
    typedef array<int> IntArray;
    typedef List<Byte> ByteList;
    typedef array<Byte> ByteArray;
    typedef List<String^> StringList;
    typedef array<String^> StringArray;
}
using namespace Typedefs;

Было бы приемлемо добавить строку «using namespace» сразу после объявления пространства имен? Если нет, то почему нет?

Ответы [ 4 ]

3 голосов
/ 11 февраля 2009

Это возможно, но я не думаю, что это разумно. Это просто побеждает всю цель пространства имен, выставляя его содержимое повсюду. Если вы не хотите указывать Typedefs:: или using Typedefs::xxx; или using namespace Typedefs;, я бы просто не создавал пространство имен вообще.

2 голосов
/ 11 февраля 2009

Использовать безымянное пространство имен. Если вы хотите, чтобы имена были видны только для файлов, в которые вы включили заголовки

namespace {
  int i = 10;
}

выше имеет тот же эффект, что и код ниже

namespace randomName {
  int i = 10;
}
using randomName; 

так что ничего не будет доступно из любого другого файла.

1 голос
/ 11 февраля 2009

Установка 'использование пространства имен XXX;' Директива в заголовочный файл обычно считается плохой идеей, так как она в первую очередь опровергает идею наличия пространства имен. Это может легко привести к возникновению конфликтов имен, которых, как предполагается, следует избегать введению пространства имен.

Мой совет - не делайте этого, при необходимости вставляйте их в соответствующие исходные файлы (.cpp).

0 голосов
/ 11 февраля 2009

Вы могли бы также определить свои новые типы вне любого пространства имен, или я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...