-2

我正在尝试创建一个简单的静态类库,以将 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' 未被捕获

但这就是我想要实现的目标。

我怎样才能做到这一点?

4

1 回答 1

1

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

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());
    });
于 2018-07-10T21:44:31.017 回答