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

标签 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) 中,我有一个不返回任何内容 (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::functionstd::function 能够处理普通函数指针以及 lambda 或对象/方法组合的任何其他组合。

关于c++ - 将 typedef 函数指向另一个类中的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56966854/

相关文章:

c++ - libc++ 的 std::is_literal_type 是如何工作的?

c++ - Big Oh 是唯一用于衡量 STL 复杂性的符号吗

c++ - 以模板类型作为参数的模板的 typedef

c++ - 这段代码中有什么错误?

c# - 读取mfc资源dll内容

c++ - C 库 - 在 C++ 中使用 : redefinition, 不同的类型修饰符

c typedef(ed) 不透明指针

c++ - typedef 的用例

c - Typedef,违反 ODR : same keyword alias different types

c++ - 通过网络连接从 C# 向非托管 C++ 发送数据