[英]Function pointers to member functions of a parent class
我一直在尝试理解C ++中的函数指针,以便我可以在我的一个项目中成功使用它们。 我遇到了逻辑问题。 假设我们有两个类:父类和继承父类的子类。
class Parent{
...other stuff
void (Parent::*ptr2func) ();
...other stuff
};
然后我们有一个子类:
class Child : public Parent{
...other stuff
void afunc();
...other stuff
};
我想将父类的指针连接到子类的afunc()
函数。 在子类的构造函数中,我尝试这样做:
Child::Child()
{
ptr2func = &Child::afunc;
}
这返回了一个预期的错误:无法在赋值中将void (Child::*)()
为void (Parent::*)()
。
我担心会发生这样的事情。 但是我该如何克服这个呢? 我不能将父类的成员函数的函数指针链接到子类的成员函数吗? 正如您所理解的那样,我试图通过函数指针实现多态性,仅用于实验而不使用虚函数。 我一直相信这是可能的。 我的错是什么? 或者它是不可能的?
void (Parent::*)()
接受Parent类型的对象。 函数Child::afunc
需要Child类型的对象。 因此,将指针转换为void (Parent::*)()
将允许无效调用。
成员函数指针实际上不能用于实现多态。 在不使用virtual的情况下实现多态的传统方法是使用常规函数指针:
struct MyBaseClass
{
void (*function)(MyBaseClass* this_pointer);
};
如果转换工作会很危险,因为您可以使用指针或对父类型的引用调用类Child中的函数,该父类可能不是Child类型。
如果你传入一个函数和一个指针/引用,你可以使用boost :: bind来实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.