C语言通过函数指针调用c++成员函数


#1
#include <iostream>
#include <stdio.h>

void fa()
{
    printf("void fa....\n");
}

void fp(void(*p)())
{
    (*p)();
}

class base{
public:
    void test()
    {
        printf("void test();\n");
    }
};
int main(int argc,char **argv)
{
    typedef void(*fn)();
    fn ff = fa;
    fp(ff);  //ok 
    fp(fa);//直接调用 ok

    base b;
    void(base::*pfn)() = &base::test;
    (b.*pfn)(); //ok
    ((&b)->*pfn)(); //ok

    
    fp(  ((&b)->*pfn)  ); //肯定不对
    该如何  把成员函数指针传参 并正常执行调用。
}

#2

C 佬你好, void* 不属于 c++。

C++ 要做函数对象,使用 std::function<>


#3
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

class base{
public:
    void test()
    {
        printf("void test();\n");
    }
};
int main(int argc,char **argv)
{
    base b;
    typedef void (*cfp)(base *);
    auto x = &base::test;

    cfp c;
    memcpy(&c, &x, sizeof(c));
    //或者*((long*)&c) = *((long*)&x);
    c(&b);
}

对于非静态函数,貌似只能这样,你得传个this进去

静态函数就直接用了


#4

只能 静态成员函数或者普通函数了


#5

Cplusplus 类类型对象涉及到的问题较繁琐 虚 重载等


#6

繁琐你妹夫啊。