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

时间:2015-06-08 18:33:17

标签: c++

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

一个例子:

    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
             }

    };

我得到&#34;错误:没有匹配函数来调用...&#34;。

这可能吗?如果是的话,我做错了什么?任何帮助将不胜感激。我查看了child class method pointer to method parent argument c++但是遵循R Sahu的方法似乎不起作用,而Slava的答案似乎并不相关(我没有从父实例调用子方法)。 / p>

1 个答案:

答案 0 :(得分:0)

  

这可能吗?

如果您使用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()