C ++传递成员函数作为另一个成员函数的参数

时间:2016-05-15 22:27:22

标签: c++ class

我在Eclipse中使用Borland C ++编译器时遇到问题,我想将一个成员函数的地址传递给另一个类的构造函数,这是第一类的朋友

PCB::PCB(Thread *t, long stack, int time, void (*method)())

我正在使用方法查找FP_SEGFP_OFF,但是当我写

时它会给我错误
Thread::Thread (StackSize stackSize, Time timeSlice){
    myPCB = new PCB(this, stackSize, timeSlice, run);
}

这是我一直在收到的错误:

  

在函数Thread :: Thread(unsigned long,unsigned int)中找不到'PCB :: PCB(Thread * const,unsigned long,unsigned int,void)'的匹配项

1 个答案:

答案 0 :(得分:4)

尽管成员函数调用看起来像是常规函数调用,但两者并不相同,因为将this指针传递给被调用函数会涉及编译器技巧。当您从另一个成员函数调用成员函数时,C ++会为您填写this指针。这就是为什么成员函数与常规函数不兼容,只有静态函数。

如果需要将函数传递给未编写的API,则需要传递常规函数。否则,请考虑更改代码以取代std::function,因为它与成员函数兼容。

有时,第三方C风格的API支持为调用的“上下文”传递额外的参数。如果您的API也支持void*,您可以编写一个常规函数,将一个void指针强制转换回类的实例,并在该实例上调用成员函数。