回调使API使用率脱钩

时间:2018-07-10 19:58:05

标签: c++ websocket cpprest-sdk

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

但这是我要实现的目标。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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