解耦 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());
});
我正在尝试创建一个简单的静态 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());
});