繁体   English   中英

指向父类的成员函数的函数指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM