我在类 A.h 上有这个 typedef 函数:
typedef void(*PERCENTAGE_CALLBACK)(float);
我正在使用类的一个函数:
int API_GenerateLayerData(int layerIndex, unsigned char *data, int dataSize, PERCENTAGE_CALLBACK callback);
在另一个类 (ClassB.cpp) 中,我有一个不返回任何内容 (void) 但接受浮点值的函数,就像 PERCENTAGE_CALLBACK 一样:
void ClassB::Update(float progress)
{
emit ChangeProgress((int)progress);
}
但是当我初始化要使用的 PERCENTAGE_CALLBACK 对象并传递给 ClassA 中的函数时,它会抛出一个错误:
public void someFunction()
{
ClassA *a = new ClassA();
PERCENTAGE_CALLBACK callback = &ClassB::Update; //Error: cannot convert void ti PERCENTAGE_CALLBACK
a->API_GenerateLayerData(someNum, someData, count, callback);
}
How do I initialize the Class A's callback that points to the Class B's Update Function?
最佳答案
你根本不能那样做,因为调用成员函数还需要一个应该调用该成员的对象。
如果您的 api 只提供一个函数指针,而不管它是哪个签名,那么即使不通过 std::bind
或使用 lambda 函数,您也无法解决这个问题。它们都是“可调用”对象,因此,它们还需要一个对象指针或回调引用。
如果您能够更改正在使用的 API,则应将回调注册更改为 std::function
。 std::function
能够处理普通函数指针以及 lambda 或对象/方法组合的任何其他组合。
关于c++ - 将 typedef 函数指向另一个类中的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56966854/