Ant*_*Ant 32 c++ alias scope namespaces
我希望能够在类声明中使用命名空间别名,但是会出现编译器语法错误.
struct MyClass
{
    namespace abc = a_big_namespace;
    void fn() {
        abc::test();
    }
};
我可以让它工作的唯一方法是将别名放在每个函数中.
void fn() {
    namespace abc = a_big_namespace;
    abc::test();
}
另外,我希望能够使用函数参数的别名.我没有找到解决办法.
void fn(abc::testType tt) {
    abc::test(tt);
}
有办法做我想要的吗?
编辑:我的解决方案
我发现我的特定问题并不需要未命名的命名空间,只需这样做:
namespace myspace
{
    namespace abc = a_big_namespace;
    struct MyClass
    {
       void fn(abc::testType tt) {
          abc::test(tt);
       }
    };
}
要切换到另一个库,这是我的别名命名空间引用的,我只需更改别名.这种方法甚至允许我在一个文件中有两次相同的类,每次都引用一个不同的库.感谢你的帮助.
Naw*_*waz 33
类定义中的命名空间别名是非法的,如语言规范所指定.
它仅允许在命名空间范围或功能范围内.
您可以在命名空间范围内创建别名.但这将成为永久别名,也可以从其他文件中使用.但解决方案很简单:您可以使用未命名的命名空间来防止别名(因此来自大命名空间的所有符号)从其他文件中可见.这是如何做到的:
//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.
别名在其他文件中不可见.编译时OtherFile.cpp,GCC(4.5.0)说,
'myspace :: abc'尚未申报
这证明别名只在中abc可见.感谢未命名的命名空间.MyFile.cpp
演示:http://www.ideone.com/2zyNI(虽然它没有演示OtherFile概念.我在ideone.com上不能有多个文件)