c++在参数中将子类方法传递给基类方法

c++ pass child class method to base class method in argument

本文关键字:类方法 基类 参数 c++      更新时间:2023-10-16

我有一个基类,它有一个方法,该方法以方法指针(类函数指针)作为参数。我从这个基类派生出一个子类。然后我想把子类的一个方法传递给基类的方法。

一个例子:

    class Base1
    {
        public:
             void BaseMethod(void (Base1::*basemth)(/*arguments list A*/), 
                             double a)){/*definition*/}
    };
    class Derived1 : public Base1
    {
        public: 
             void ChildMethod(/*arguments list A*/)
             void ChildMethod2()
             {
                double double_a = 1.0;
                void (Derived1::*pntr)(/*arguments list A*/);
                pntr = &Derived1::ChildMethod;
                BaseMethod(pntr, double_a); //<---- this fails
             }
    };

我得到"error: no matching function for call to…"

这可能吗?如果是,我做错了什么?任何帮助都将不胜感激。我已经查看了指向方法父参数的子类方法指针c++,但遵循R Sahu的方法似乎不起作用,而Slava的答案似乎不相关(我没有从父实例调用子方法)。

这可能吗?

如果您使用virtual成员函数,这是可能的,并且应该可以正常工作。如果使用非虚成员函数,它将不起作用。

示例程序:

#include <iostream>
class Base1
{
   public:
      void BaseMethod(void (Base1::*basemth)(), double a)
      {
         (this->*basemth)();
      }
      virtual void Method2() = 0;
};
class Derived1 : public Base1
{
   public: 
      void Method2()
      {
         std::cout << "In Derived1::Method2()n";
      }
      void ChildMethod2()
      {
         double double_a = 1.0;
         BaseMethod(&Base1::Method2, double_a);
      }
};
int main()
{
   Derived1 d;
   d.ChildMethod2();
}
输出:

In Derived1::Method2()