gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:43:48 24 4
gpt4 key购买 nike

我在 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);
}

这是我一直遇到的错误:

Could not find a match for 'PCB::PCB(Thread * const,unsigned long,unsigned int,void)' in function Thread::Thread(unsigned long,unsigned int)

最佳答案

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

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

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

关于C++ 传递成员函数作为另一个成员函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com