如何通过引用传递成员回调函数
How to pass a member callback function by reference
我正在尝试实现一种方法来处理C++中的HTTP请求,但是我遇到了一些微不足道的问题。我试图将这些函数封装到两个不同的类中,当我不知道当回调函数作为非静态成员函数实现时,我应该如何通过引用传递回调函数,有什么建议吗?
谢谢!
以下是我的一些实现:
// my_lib.hpp
#include <functional>
class my_lib {
public:
// A library to handle the HTTP requests
using request_callback = std::function<void(int response_code, const std::string &data)>;
void perform_request(std::string &url, std::string &body, const request_callback &callback);
};
// my_lib.cpp
#include "my_lib.hpp"
#include <string>
void my_lib::perform_request(std::string &url, std::string &body, const request_callback &callback) {
// Do http request...
std::string str("...");
callback(200, str);
}
// myClass.hpp
#include <string>
#include <functional>
#include "my_lib.hpp"
class myClass {
public:
using request_callback = std::function<void(int response_code, const std::string &data)>;
void on_action_callback(int response_code, const std::string &data);
void on_action_endpoint(const std::string &request, const request_callback &callback);
private:
my_lib* lib_instance;
};
// myClass.cpp
#include "myClass.hpp"
void myClass::on_action_callback(int response_code, const std::string &data) {
// do something
}
void myClass::on_action_endpoint(const std::string &request, const request_callback &callback) {
int code = 0;
// TODO: how should I pass the on_action_callback here....
lib_instance->perform_request("a.com", "a", myClass::on_action_callback);
}
只需包装成一个 lambda:
lib_instance->perform_request("a.com", "a",
[this](int response_code, const std::string &data)
{ on_action_callback(response_code, data); });
这里应该捕获this
以便能够调用成员函数。另一种选择是使用从成员函数构造的std::function
进行bind
this
,但这里并不真正需要这种复杂性
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 如何使用C++对象的成员函数作为 C 样式回调?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如何将派生类中的成员函数作为回调传递?
- 将成员函数传递给glfwSet*回调
- 正在尝试为成员进行回调
- ROS 订阅回调 - 使用 boost::绑定成员函数
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 模板函数,用于在模板化对象上执行成员回调,而无需提供其实例
- 可以使用仅功能成员属性进行回调界面
- CPP成员对C回调包装器的反馈
- 将非静态成员函数作为回调传递
- 如何使用std::bind向信使系统添加成员回调
- 如何通过引用传递成员回调函数
- 带有正向声明的C++成员回调
- 具有对象成员回调的 std 函数
- 如何实现一系列使用非静态类字段的类成员回调
- C++ 类成员回调
- 'No Match' 使用 std::tr1::函数的成员回调函数出错