将 typedef 函数指向另一个 class 中的另一个函数
Point a typedef function to another function in another class
我在 Class A.h:
上有这个 typedef 函数
typedef void(*PERCENTAGE_CALLBACK)(float);
我正在使用 class' 函数之一:
int API_GenerateLayerData(int layerIndex, unsigned char *data, int dataSize, PERCENTAGE_CALLBACK callback);
在另一个 Class (ClassB.cpp) 中,我有这个函数 returns 什么都没有(无效)但是接受一个浮点值就像 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 函数,您也无法解决此问题。它们也是 "callable" 对象,因此,它们还需要一个对象指针或引用来进行回调。
如果您可以更改您正在使用的 API,您应该将回调注册更改为 std::function
。 std::function
能够处理普通函数指针以及 lambda 或 object/method 组合的任何其他组合。
我在 Class A.h:
上有这个 typedef 函数typedef void(*PERCENTAGE_CALLBACK)(float);
我正在使用 class' 函数之一:
int API_GenerateLayerData(int layerIndex, unsigned char *data, int dataSize, PERCENTAGE_CALLBACK callback);
在另一个 Class (ClassB.cpp) 中,我有这个函数 returns 什么都没有(无效)但是接受一个浮点值就像 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 函数,您也无法解决此问题。它们也是 "callable" 对象,因此,它们还需要一个对象指针或引用来进行回调。
如果您可以更改您正在使用的 API,您应该将回调注册更改为 std::function
。 std::function
能够处理普通函数指针以及 lambda 或 object/method 组合的任何其他组合。