如何从基类中公开隐藏的重载?

Wil*_*mKF 5 c++ inheritance hidden overloading

鉴于此代码:

class base {
public:
  string foo() const; // Want this to be visible in 'derived' class.
}

class derived : public base {
public:
  virtual int foo(int) const; // Causes base class foo() to be hidden.
}
Run Code Online (Sandbox Code Playgroud)

如何在不使用调用基类的虚方法重载复制它的情况下使base :: foo()对派生可见?是否using做的伎俩,如果是的话,它在哪里去了,是不是这样?

class derived : public base {
public:
  virtual int foo(int) const;
  using base::foo;
}
Run Code Online (Sandbox Code Playgroud)

ybu*_*ill 4

很抱歉回答简短,但是是的。它完全像这样并且做你想做的事:

class derived : public base {
public:
  virtual int foo(int) const;
  using base::foo;
};
Run Code Online (Sandbox Code Playgroud)

另请注意,即使没有:您也可以访问基础using

derived x;
string str = x.base::foo(); // works without using
Run Code Online (Sandbox Code Playgroud)