Вызов метода перегруженного родителя из дочернего класса в C ++ - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь понять, возможно ли вызвать родительский член функции из дочернего класса.

В основном у меня есть следующий код:

struct Parent
   {
   template<class... Args>
   void doFoo(Args&&... args)
     {
     std::cout << "parent doFoo";
     }

   template<class... Args>
   void foo(Args&&... args)
     {
     doFoo(args...);
     }
   };

 struct Child : Parent
   {
     template<class... Args>
     void doFoo(Args&&... args)
       {
       std::cout << "child doFoo";
       }
   };

   Child c;
   c.foo(); // This should invoke Child::doFoo()

Есть ли простой способполучить "child doFoo" в качестве вывода без дополнительных затрат?

1 Ответ

0 голосов
/ 19 марта 2019

Я не знаю, если это вариант, но если вы можете позволить себе шаблон класса вместо метода, вы можете сделать «doFoo» виртуальным, и тогда он будет работать, как вы ожидаете.

#include <iostream>

template <typename ... Args>
struct Parent
   {
   virtual void doFoo(Args&&... args)
     {
     std::cout << "parent doFoo";
     }

   void foo(Args&&... args)
     {
     doFoo(args...);
     }
   };

template <typename ... Args>
 struct Child : Parent <Args...>
   {
     void doFoo(Args&&... args) override
       {
       std::cout << "child doFoo";
       }
   };

int main()
{
   Child<> c;
   c.foo(); // This should invoke Child::doFoo()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...