我正在使用Casablanca C++ Rest SDK进行http连接。这是一个发出http请求的基本代码。
// Creates an HTTP request and prints the length of the response stream.
pplx::task<void> HTTPStreamingAsync()
{
http_client client(L"http://www.google.com");
// Make the request and asynchronously process the response.
return client.request(methods::GET).then([](http_response response)
{
// Response received, do whatever here.
});
}
这将执行异步请求并在完成后执行回调。我需要创建自己的使用这些代码的类,并且我想将它包装到我自己的回调中。
为简单起见,假设我想创建一个具有打印google.com的html代码的方法的类。
所以我期待这样的事情:
MyClass myObject;
myObject.getGoogleHTML([](std::string htmlString)
{
std::cout << htmlString;
});
我搜索并阅读了相关文章,如:
但是当我在completion block
中使用Objective-C
时,我仍然有点困惑。我如何构建这样一个包装回调的类?
答案 0 :(得分:1)
将lambda作为一般类型。作为奖励,它可以与任何其他可调用对象一起使用。
template<typename F>
pplx::task<void> MyClass::getGoogleHTML(F f) {
http_client client(L"http://www.google.com");
return client.request(methods::GET).then(f);
}
如果您愿意,也可以通过f
和F &&f
完美转发.then(std::forward<F>(f))
。如果您实际上想要提取一些内容以提供给传入的lambda,请将lambda传递给捕获then
的{{1}}并使用提取的数据调用它。