Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich Rückruffunktionen in C++?

Wie verwende ich Rückruffunktionen in C++?

PHPz
PHPzOriginal
2024-04-13 09:24:01749Durchsuche

C++ 中回调函数通过函数指针或 lambda 表达式实现:函数指针:定义类型 void(*CallbackFunction)(int);注册回调函数:RegisterCallback(callback);调用回调函数:CallCallbacks(value);实例:事件处理类注册回调函数并触发事件。lambda 表达式:注册回调函数:RegisterCallback(std::function823779cb011116433bf22081bdae9ba2 callback);调用回调函数:CallCallbacks(value);实例:获取用户输入并注册回调函数。

C++ 中如何使用回调函数?

C++ 中回调函数的用法

回调函数是允许函数将控制权返回给调用者,然后在某些条件满足时再次执行的函数。这在事件驱动的编程中非常有用,其中一个事件可能触发多个动作。

在 C++ 中,回调函数可以通过函数指针或 lambda 表达式实现。

使用函数指针

// 定义一个函数指针类型
typedef void(*CallbackFunction)(int);

// 注册回调函数
void RegisterCallback(CallbackFunction callback) {
  // 将回调函数存储在列表中
  callbackList.push_back(callback);
}

// 调用回调函数
void CallCallbacks(int value) {
  for (auto callback : callbackList) {
    callback(value);
  }
}

// 实战案例:事件处理

// 定义一个事件处理类
class EventHandler {
public:
  void OnEvent() {
    // 调用注册的回调函数
    CallCallbacks(42);
  }
};

// 创建事件处理类实例
EventHandler eventHandler;

// 订阅事件的回调函数
RegisterCallback([](int value) {
  std::cout << "事件处理程序: " << value << std::endl;
});

// 触发事件
eventHandler.OnEvent();

使用 lambda 表达式

C++11 中引入 lambda 表达式,它提供了一种简洁的方式来定义匿名函数。

// 注册回调函数
void RegisterCallback(std::function<void(int)> callback) {
  // 将回调函数存储在列表中
  callbackList.push_back(callback);
}

// 调用回调函数
void CallCallbacks(int value) {
  for (auto callback : callbackList) {
    callback(value);
  }
}

// 实战案例:用户输入

// 创建一个获取用户输入的函数
std::string GetUserInput() {
  std::string input;
  std::cout << "输入一些文本:" << std::flush;
  std::cin >> input;
  return input;
}

// 订阅获取用户输入后的回调函数
RegisterCallback([](int value) {
  std::cout << "用户输入了:" << GetUserInput() << std::endl;
});

// 获取用户输入
GetUserInput();

Das obige ist der detaillierte Inhalt vonWie verwende ich Rückruffunktionen in C++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn