我在A.h类上具有此typedef函数:
typedef void(*PERCENTAGE_CALLBACK)(float);
我正在使用该类的函数之一:
int API_GenerateLayerData(int layerIndex, unsigned char *data, int dataSize, PERCENTAGE_CALLBACK callback);
在另一个类(ClassB.cpp)中,我有此函数不返回任何内容(无效)但接受浮点值,就像 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);
}
如何初始化指向B类更新功能的A类回调?
答案 0 :(得分:2)
您根本无法做到这一点,因为调用成员函数还需要在其上调用成员的对象。
如果您的api仅提供函数指针,而与它的签名无关,则即使没有std::bind
或使用lambda函数也无法解决此问题。它们都是“可调用的”对象,因此,它们还需要对象指针或回调的引用。
如果您能够更改正在使用的API,则应将回调注册更改为std::function
。 std::function
能够处理普通函数指针,也可以处理lambda或对象/方法组合的任何其他组合。