是否存在类似于using namespace
的构造,使得导入的符号在命名空间的主体(或主体)外部不可见?
在此示例中,whatever
和other_namespace
中的每个符号都可以通过Foo::<name_of_symbol>
访问...我想要一种方法来防止这种情况发生
namespace Foo {
using namespace whatever;
using namespace other_namespace;
// some definitions
}
作为一个完整的例子,该程序是有效的。如果存在并使用了具有预期语义的using namespace
的替代,则不会。
namespace a {
int func(int x) {
return 10;
}
}
namespace b {
using namespace a;
}
namespace c {
int do_thing(int x) {
return b::func(57);
}
}
答案 0 :(得分:5)
您可以在未命名的命名空间中使用别名。
namespace a_long_namespace_name {
void someFunc() {};
}
namespace b {
namespace { // an unnamed namespace
namespace a = a_long_namespace_name; // create a short alias
}
void someOtherFunc() {
a::someFunc();
}
}
b::a::someFunc(); // compiler error
您仍然需要编写命名空间来调用函数,但它会使调用更短。