Как можно адресовать пространства имен с одинаковыми именами на разных уровнях иерархии без конфликтов? - PullRequest
1 голос
/ 31 марта 2011

(Проблема, которую я решаю, включает стороннюю библиотеку, которую я не могу изменить)

#include <list>
//Third party lib namespace
namespace foo
{
    typedef int SomeType;
}


//my namespace
namespace mycompany
{
    namespace groo
    {
        typedef std::list<foo::SomeType> SomeTypeList;
    }

    namespace foo
    {
        typedef std::list<foo::SomeType> SomeTypeList;
    }
}

int main() { return 0; }

Попытка скомпилировать это приводит к ошибке:

error: 'SomeType' is not a member of 'mycompany::foo'

Доступ из groo работает просто отлично.Как вы получаете доступ к мелководному foo из mycompany::foo?

(я сам отвечу на это, но подумал, что опубликую вопрос на случай, если у кого-то еще будет то же самое)

Ответы [ 2 ]

5 голосов
/ 31 марта 2011

Когда компилятор запутывается в области видимости, вы всегда можете обратиться к пространству имен абсолютно.Глобальная область действия ::, поэтому абсолютное имя области действия foo::SomeType равно ::foo::SomeType

Я не совсем уверен, почему компилятор не выполняет автоматический поиск в более мелком пространстве имен, когда не находитхотя символ в более глубоком ...

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

::foo::SomeType должен это сделать.

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