回调函数

发布时间 2024-01-10 12:06:12作者: SusieSnail_SUN

两种不同机制的回调函数

1. 

 typedef void (*CallbackFunction)(int); 

       这个语句使用了指向函数的指针来定义回调函数类型。它表示一个接受一个`int`类型参数并且不返回任何值的函数指针类型。

这种方式是C风格的函数指针,它可以用来定义简单的函数指针类型,但是在复杂的场景下可能不够灵活。

#include <iostream>

// 定义回调函数类型
typedef void (*CallbackFunction)(int);

// 接受回调函数作为参数的函数
void PerformOperation(int value, CallbackFunction callback) {
    // 执行某些操作
    std::cout << "Performing operation with value: " << value << std::endl;
    
    // 调用回调函数
    callback(value * 2);
}

// 回调函数
void Callback(int result) {
    std::cout << "Callback function called with result: " << result << std::endl;
}

int main() {
    // 将回调函数传递给 PerformOperation 函数
    PerformOperation(5, Callback);

    return 0;
}

 

2.

typedef std::function<void(float start, float end, const float* pData, std::uint16_t size)> SpeFunction; 

        这个语句使用了C++11引入的`std::function`模板类来定义回调函数类型。它表示一个接受四个参数并且不返回任何值的函数类型。`std::function`提供了更灵活的方式来定义函数类型,它可以容纳函数指针、成员函数指针、函数对象等,使得回调函数的使用更加方便

总的来说,`typedef std::function`的方式更加灵活,并且能够容纳更多类型的回调函数,而`typedef void (*)`的方式则是传统的C风格函数指针的定义方式。在现代C++中,推荐使用`std::function`来定义回调函数类型,因为它提供了更多的特性和灵活性。

#include <iostream>
#include <functional>
#include <cstdint>

// 定义回调函数类型
typedef std::function<void(float, float, const float*, std::uint16_t)> SpeFunction;

// 接受回调函数作为参数的函数
void ProcessSpeData(float start, float end, const float* pData, std::uint16_t size, SpeFunction callback) {
    // 执行一些处理操作
    std::cout << "Processing spe data..." << std::endl;

    // 调用回调函数
    callback(start, end, pData, size);
}

// 回调函数
void HandleSpeData(float start, float end, const float* pData, std::uint16_t size) {
    // 处理频谱数据
    std::cout << "Handling spe data with start: " << start << ", end: " << end << ", size: " << size << std::endl;
    // 其他处理逻辑...
}

int main() {
    // 调用接受回调函数的函数,并传递回调函数作为参数
    float speData[] = {1.0f, 2.0f, 3.0f, 4.0f};
    ProcessSpeData(100.0f, 10.0f, speData, 4, HandleSpeData);

    return 0;
}