C ++使用来自其他命名空间的符号,而无需从外部访问它们

时间:2017-08-18 05:56:40

标签: c++

是否存在类似于using namespace的构造,使得导入的符号在命名空间的主体(或主体)外部不可见?

在此示例中,whateverother_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);
  }
}

1 个答案:

答案 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

您仍然需要编写命名空间来调用函数,但它会使调用更短。