如何在不冲突的情况下解决不同层次级别的同名命名空间?

Cat*_*kul 1 c++ scope namespaces

(我正在解决的问题涉及我无法改变的第三方库)

#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; }
Run Code Online (Sandbox Code Playgroud)

尝试编译它会产生错误:

error: 'SomeType' is not a member of 'mycompany::foo'
Run Code Online (Sandbox Code Playgroud)

groo工作访问就好了.你怎么访问浅foomycompany::foo

(我会自己回答这个问题,但我想发布问题以防其他人有同样的问题)

Cat*_*kul 5

当编译器对范围感到困惑时,您总是可以绝对地寻址命名空间.全局范围是::如此foo::SomeType绝对的范围名称::foo::SomeType

我不确定为什么编译器在没有找到更深层的符号时会自动搜索较浅的命名空间...