解耦 API 用法的回调

Callbacks to decouple API usage

我正在尝试创建一个简单的静态 class 库,以将 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());

        });
    }
};

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

'ptr' is not captured

但这就是我想要达到的目标。

我该怎么做?

正如编译器所说,您没有在试图使用它的 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());
    });