回调函数
两种不同机制的回调函数
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; }