如何从静态成员函数调用指向成员函数的指针?

django013

我需要获得一个由标准函数指针调用的成员函数,因此我尝试抽象如下内容:

class Sample {
public:
    virtual void doSomething(void) = 0;
};


class A : public Sample {
    void doSomething(void);     // details omitted
};

class B : public Sample {
    void doSomething(void);     // details omitted
};


class Executor {
public:
    Executor(Sample *sample)
     : func(&sample->doSomething)
    {
    }

    static void *execute(void *data) {
        Executor *pX = data;

        (pX->*func)();          // error invalid access of func from static function

        (pX->*pX->func)();      // error pointer to member type 'void (Sample::)()'
                                //       incompatible with object type 'Executor'
    }

private:
    void (Sample::*func)(void);
};



int main(void) {
    A   myA;
    B   myB;
    Executor x0(&myA);
    Executor x1(&myB);

    externallyInvoke(&Executor::execute, &x0);
    externallyInvoke(&Executor::execute, &x1);
}

externallyInvoke是Linux系统调用,它需要一个函数指针和一个数据指针。我想将静态成员函数与此指针一起用作数据。

...而且我不希望类喜欢AB具有静态成员。所以我的想法是创建一个像classSample这样的接口,该接口A扩展B

我的问题是我不知道如何从函数内部调用指向成员函数的指针Executor::execute

Angew不再为SO感到骄傲

问题在于您需要两个对象execute-一个是Executor将提供其实例的对象,另一个是在其上调用func的实例(从其派生的类)所以,你必须存储对象的内部,而不是功能:SamplefuncExecutor

class Executor {
public:
    Executor(Sample *sample)
     : obj(sample)
    {
    }

    static void *execute(void *data) {
        Executor *pX = static_cast<Executor*>(data);

        pX->obj->doSomething();
    }

private:
    Sample *obj;
};


int main() { // note that `void main()` is not legal C++
    A   myA;
    B   myB;
    Executor x0(&myA);
    Executor x1(&myB);

    externallyInvoke(&Executor::execute, &x0);
    externallyInvoke(&Executor::execute, &x1);
}

指向成员函数(例如您的original void (Sample::*func)()的指针标识类中的函数,但不存储该对象。您仍然需要提供一个来调用该函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从静态成员函数调用指向成员函数的指针?

来自分类Dev

指向函数调用的指针与指向成员函数调用的指针

来自分类Dev

指向函数调用的指针与指向成员函数调用的指针

来自分类Dev

传递指向非静态成员函数的指针

来自分类Dev

C ++:如何返回指向非静态成员函数的指针?

来自分类Dev

指向成员函数的指针

来自分类Dev

指向成员函数的指针

来自分类Dev

通过指向类成员的指针调用函数

来自分类Dev

无法调用指向成员函数的指针

来自分类Dev

如何调用指向从映射中检索的成员函数的指针?

来自分类Dev

指向成员函数的函数指针

来自分类Dev

指向成员函数的函数指针

来自分类Dev

成员函数返回指向成员函数的指针

来自分类Dev

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

来自分类Dev

初始化指向同名函数的静态成员函数指针

来自分类Dev

获取指向非静态成员函数的函数指针

来自分类Dev

调用成员函数指针

来自分类Dev

指向成员函数的指针的向量

来自分类Dev

指向类的成员函数的指针

来自分类Dev

下垂指向成员函数的指针

来自分类Dev

指向成员函数的指针-语法

来自分类Dev

指向类成员函数的指针

来自分类Dev

指向成员函数调用的指针中的指针“ this”的地址意外更改

来自分类Dev

如何设置 (*sa_handler)(int) 指向作为类成员的函数的指针?(非静态成员函数的无效使用)

来自分类Dev

llvm 如何知道成员函数指针是否指向虚函数?

来自分类Dev

指向成员的指针所指向的函数类型

来自分类Dev

指向成员的指针所指向的函数类型

来自分类Dev

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

来自分类Dev

如何通过本身是类成员的指针调用成员函数

Related 相关文章

热门标签

归档