Использование видимости пространства имен в заголовке - PullRequest
0 голосов
/ 06 марта 2011

Я работаю над библиотекой c ++, которая разбита на несколько пространств имен.Так как я пытаюсь избежать директивы using в заголовочных файлах, я вынужден сделать альтернативный «namespace :: class» для переменных, возвращаемых значений и параметров.Как вы можете себе представить, это может запутаться.Итак, я попытался поместить оператор using в декорацию пространства имен (см. Ниже), и это, похоже, помогло. Его не видно в файлах, включающих этот файл.было бы хорошо сделать это вместо этого?

Ответы [ 3 ]

2 голосов
/ 06 марта 2011
// your header

namespace Project
{
    namespace Utility { class A; }

namespace System
{
    using Utility::A;

    class B
    {
        A *a;   // instead of Utility::A *a
    };
}
}

// end your header

class A {};

int main()
{
    using namespace Project::System;
    A a;
}

test.cpp:25:5: error: reference to 'A' is ambiguous
    A a;
    ^
test.cpp:20:7: note: candidate found by name lookup is 'A'
class A {};
      ^
test.cpp:9:20: note: candidate found by name lookup is 'Project::System::A'
    using Utility::A;
                   ^
1 error generated.
1 голос
/ 06 марта 2011

Это менее плохо, если ничего больше.

С другой стороны, я не думаю, что "беспорядочно" излагать полные имена, когда вы их используете. Для меня это просто добавляет ясности к коду.

0 голосов
/ 07 марта 2011

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

Если вы используете пространства имен для разделения независимых доменов, не следует указывать их явно слишком часто.

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