remotecallbacklist防止注册重复回调函数代码
时间: 2023-10-05 15:04:35 浏览: 66
以下是一种可能的实现方式:
```cpp
#include <functional>
#include <vector>
#include <algorithm>
class RemoteCallbackList {
public:
void registerCallback(std::function<void()> callback) {
// 检查回调函数是否已经注册过了
if (std::find(callbacks_.begin(), callbacks_.end(), callback) == callbacks_.end()) {
callbacks_.push_back(callback);
}
}
void unregisterCallback(std::function<void()> callback) {
// 从回调函数列表中移除指定回调函数
callbacks_.erase(std::remove(callbacks_.begin(), callbacks_.end(), callback), callbacks_.end());
}
void notifyCallbacks() {
// 依次调用所有回调函数
for (auto& callback : callbacks_) {
callback();
}
}
private:
std::vector<std::function<void()>> callbacks_;
};
```
在上述代码中,RemoteCallbackList 类维护了一个回调函数的列表,registerCallback 和 unregisterCallback 分别用于注册和取消注册回调函数,notifyCallbacks 用于触发所有注册的回调函数。在 registerCallback 中,我们使用 std::find 函数检查回调函数是否已经注册过了,如果没有则添加到回调函数列表中。在 unregisterCallback 中,我们使用 std::remove 和 std::vector::erase 函数从回调函数列表中移除指定的回调函数。这样,我们就可以确保同一个回调函数不会被重复注册。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)