C++ namespace alias in entire class scope

后端 未结 4 1173
庸人自扰
庸人自扰 2021-02-02 07:33

I expected to be able to use a namespace alias in a class declaration but get a compiler syntax error.

struct MyClass
{
    namespace abc = a_big_namespace;
             


        
4条回答
  •  孤城傲影
    2021-02-02 08:13

    Namespace alias in the class definition is illegal, as specified by the language specification.

    Its allowed in only in namespace scope or function scope.

    You can make alias at namespace scope. But that will be make permanent alias which can be used from other files as well. But the solution is simple : you can use unnamed namespace to prevent alias (and therefore all symbols from the big namespace) from being visible from other files. This is how it can be done:

    //MyFile.cpp
    namespace myspace
    { 
        namespace   //this is unnamed namespace
        {
           namespace abc = a_big_namespace;     
        }
        struct MyClass 
        {
          void fn() 
          { 
             abc::test();  //don't worry, this will work!
          } 
        };
    }
    
    //OtherFile.cpp
    
    myspace::abc::test(); //error - that means, prevention worked.
    

    The alias is not visible from other files. When compiling OtherFile.cpp, GCC (4.5.0) says,

    'myspace::abc' has not been declared

    That proves the alias abc is visible only in MyFile.cpp. Thanks to unnamed namespace.

    Demo : http://www.ideone.com/2zyNI (though it doesn't demonstrate OtherFile concept. I cannot have more than one file at ideone.com)

提交回复
热议问题