将typedef函数指向另一个类中的另一个函数

时间:2019-07-10 08:47:08

标签: c++ typedef

我在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类回调?

1 个答案:

答案 0 :(得分:2)

您根本无法做到这一点,因为调用成员函数还需要在其上调用成员的对象。

如果您的api仅提供函数指针,而与它的签名无关,则即使没有std::bind或使用lambda函数也无法解决此问题。它们都是“可调用的”对象,因此,它们还需要对象指针或回调的引用。

如果您能够更改正在使用的API,则应将回调注册更改为std::functionstd::function能够处理普通函数指针,也可以处理lambda或对象/方法组合的任何其他组合。