c调用c语言函数指针,通过函数指针调用C+类方法

b749d95ce072be43531548f3c861ea80.png

翻过高山走不出你

如何获得类成员函数的函数指针,然后使用特定对象调用该成员函数?最简单的方法是从typedef..对于成员函数,可以在类型声明中添加类名:typedef void(Dog::*BarkFunction)(void);然后,要调用该方法,请使用->*操作员:(pDog->*pBark)();此外,如果可能的话,我也希望通过指针调用构造函数。这是可能的吗?如果可能的话,最好的方法是什么?我不相信你能和这样的构造器一起工作-函数和函数是特别的。实现这类任务的正常方法是使用工厂方法,它基本上只是一个静态函数,它为您调用构造函数。有关示例,请参阅下面的代码。我已经修改了你的代码来做你所描述的。下面有一些警告。#include class Animal{public:

    typedef Animal*(*NewAnimalFunction)(void);

    virtual void makeNoise()

    {

        std::cout <

    }};class Dog : public Animal{public:

    typedef void(Dog::*BarkFunction)(void);

    typedef Dog*(*NewDogFunction)(void);

    Dog () {}

    static Dog* newDog()

    {

        return new Dog;

    }

    virtual void makeNoise ()

    {

        std::cout <

    }};int main(int argc, char* argv[]){

    // Call member function via method pointer

    Dog* pDog = new Dog ();

    Dog::BarkFunction pBark = &Dog::makeNoise;

    (pDog->*pBark)();

    // Construct instance via factory method

    Dog::NewDogFunction pNew = &Dog::newDog;

    Animal* pAnimal = (*pNew)();

    pAnimal->makeNoise();

    return 0;}现在,尽管您通常可以使用Dog*代替Animal*由于多态的魔力,函数指针的类型不遵循类层次结构的查找规则。因此,动物方法指针与Dog方法指针不兼容,换句话说,您不能分配Dog* (*)()类型变量Animal* (*)().静电newDog方法是一个工厂的简单示例,它简单地创建并返回新实例。作为一个静态函数,它有一个正则函数。typedef(没有类限定符)。在回答了上述问题后,我想知道是否没有更好的方法来达到你所需要的。有一些特定的场景,您可以这样做,但您可能会发现,还有其他模式更适合您的问题。如果你用更笼统的语言来描述你想要达到的目标,蜂巢思维可能会更有用!与上述相关,您无疑会发现升压绑定库和其他相关模块非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值