我有一个基类,它有一个方法,将方法指针(类函数指针)作为参数。我从这个基类派生了一个子类。然后我想将子类的方法传递给基类的方法。
一个例子:
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>
答案 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()