取消API使用的调用

Callbacks to decouple API usage

本文关键字:调用 API 取消      更新时间:2023-10-16

我正在尝试创建一个简单的静态类库,以将WebSocket的使用与我的其余代码解耦。创建它将使我能够轻松地切换WebSocket库(我目前正在使用cpprestsdk(,而无需根据不久的将来将执行的基准测试来更改我的代码(或其底层逻辑(。

在下面的代码中,我试图对openConnection():进行回调

class WebSocket
{
websocket_callback_client wsClient;     
void openConnection(void (*ptr)(std::string response),std::string _url)
{
wsClient.connect(_url).then([](){ });
wsClient.set_message_handler([](websocket_incoming_message msg)
{
ptr(msg.extract_string().get());
});
}
};

这看起来显然是错误的,因为编译器抛出了一个错误:

未捕获"tr">

但这正是我努力实现的目标。

我该怎么做?

正如编译器所说,您没有在试图使用它的lambda中捕获ptr。这是因为您将lambda的捕获列表设置为空。您需要在lambda的捕获列表中指定ptr

wsClient.set_message_handler(
[ptr](websocket_incoming_message msg)
{
ptr(msg.extract_string().get());
});

或者,让lambda自己计算出需要捕获ptr

wsClient.set_message_handler(
[=](websocket_incoming_message msg)
{
ptr(msg.extract_string().get());
});