如何在C++中使用namespace :: function选择函数的单个重载?

MKo*_*MKo 22 c++ namespaces using

考虑以下C++代码.

namespace A {
    void f() { // first function
    }

    void f(int) { // second function
    }
}
...
using A::f; // introduces both functions
Run Code Online (Sandbox Code Playgroud)

有没有办法只引入一个功能?

Eri*_*c Z 18

该行为在标准中有明确定义.

C++03 7.3.3 The using declaration:

"...... 如果名称是重载成员函数的名称,那么所有命名的函数都应该是可访问的."


iam*_*ind 8

using关键字将把所有名称带入当前范围.所以使用这个当前的代码是不可能的.

但是,您可以将名称部分引入文件,如下所示:

namespace A {
  void f();  // declaration
}
using A::f;
// now only `A::f()` is visible in the subsequent code
// technically `A::f(int)` is not yet visible (thus unusable)

// introduce the other function later on
namespace A {
  void f(int);
}
Run Code Online (Sandbox Code Playgroud)

演示.

编辑:更好的方法是放入A::f(int)嵌套namesapce并引入别名(为了方便使用).

namespace A {
  void f();
  namespace Internal {
    void f(int);
  }
}
using A::f;
namespace A_ = A::Internal;
Run Code Online (Sandbox Code Playgroud)

现在,其他功能也可用作A_::f(int).