Ant*_*Ant 32 c++ alias scope namespaces
我希望能够在类声明中使用命名空间别名,但是会出现编译器语法错误.
struct MyClass
{
namespace abc = a_big_namespace;
void fn() {
abc::test();
}
};
Run Code Online (Sandbox Code Playgroud)
我可以让它工作的唯一方法是将别名放在每个函数中.
void fn() {
namespace abc = a_big_namespace;
abc::test();
}
Run Code Online (Sandbox Code Playgroud)
另外,我希望能够使用函数参数的别名.我没有找到解决办法.
void fn(abc::testType tt) {
abc::test(tt);
}
Run Code Online (Sandbox Code Playgroud)
有办法做我想要的吗?
编辑:我的解决方案
我发现我的特定问题并不需要未命名的命名空间,只需这样做:
namespace myspace
{
namespace abc = a_big_namespace;
struct MyClass
{
void fn(abc::testType tt) {
abc::test(tt);
}
};
}
Run Code Online (Sandbox Code Playgroud)
要切换到另一个库,这是我的别名命名空间引用的,我只需更改别名.这种方法甚至允许我在一个文件中有两次相同的类,每次都引用一个不同的库.感谢你的帮助.
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.
Run Code Online (Sandbox Code Playgroud)
别名在其他文件中不可见.编译时OtherFile.cpp,GCC(4.5.0)说,
'myspace :: abc'尚未申报
这证明别名只在中abc可见.感谢未命名的命名空间.MyFile.cpp
演示:http://www.ideone.com/2zyNI(虽然它没有演示OtherFile概念.我在ideone.com上不能有多个文件)
| 归档时间: |
|
| 查看次数: |
11999 次 |
| 最近记录: |