Указание в классе объявления об использовании для разных функций с одинаковым именем - PullRequest
4 голосов
/ 21 сентября 2019

При использовании объявления использования для предоставления методов базового класса, как я могу получить доступ к методам с одинаковыми именами, но разными параметрами?

class Base
{
protected:
    void f();
    void f(int);
};

class Derived: public Base
{
    using Base::f; // which is exposed, and how can I manually specify?
};

1 Ответ

1 голос
/ 21 сентября 2019

Таким образом, будут доступны все методы в базовом классе, и если вы хотите использовать только определенный метод в производном классе, вам нужно использовать forwarding function

class Base{
  protected:
  void f();
  void f(int);
};

class Derived: public Base
{
 public:
  void f()    //forwarding function
  {
    Base::f();
  }
};

для более подробного объяснения этогоМетод, который вы можете прочитать в первой книге Скотта Мейерса, посвященной теме «Избегайте сокрытия унаследованных имен» ( ссылка на этот элемент)

...