在一个函数中使用来自命名空间的符号,而在同一个文件中使用另一个

时间:2014-05-09 15:39:23

标签: c++ c++11 namespaces

我必须在同一个foo()和同一个文件中定义两个函数,比如bar()namespace。对于第一个foo()的定义,我想使用namespace other的所有符号,但不希望namespace other中的符号自动在我的范围内其他功能,bar()。这可能吗?怎么样?

(注意:我不想知道替代方案"解决方案"要么避免这种缓解问题,例如namespace o=other等。

2 个答案:

答案 0 :(得分:4)

是的,有可能:

void foo()
{
  using namespace abc;
  ....
}

void foo()
{
  using abc::x;
  using abc::y;
  using abc::z;
  ....
}

答案 1 :(得分:4)

#include <iostream>
void quux() { std::cout << "root\n"; }

namespace other {
  void quux(int x = 0) { std::cout << "other\n"; }
}
namespace taxes {
  void foo() {
    using namespace other;
    quux(3);
  };

  void bar() {
    quux();
  }
}

int main() {
  taxes::foo();
  taxes::bar();
}

Live example

请注意,quux中的bar如果可以看到other::quux,则不明确,但不能。{/ p>

另一方面,允许您访问函数namespace other的'head'中的foo(参数等),但这是一个罕见的要求。可能存在涉及内联namespace等的解决方案,但可能不值得混淆。