我正在尝试创建一个简单的静态类库,以将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”
但这是我要实现的目标。
我该怎么做?
答案 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());
});