Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将lambda传递给asio异步\u wait_C++_C++11_Boost Asio - Fatal编程技术网

C++ 将lambda传递给asio异步\u wait

C++ 将lambda传递给asio异步\u wait,c++,c++11,boost-asio,C++,C++11,Boost Asio,为什么将lambda传递给asio asyn_wait()需要auto…参数,而传递函数不需要像timer.async_wait(&print)那样的东西(即只需要函数名就可以了) intmain() { boost::asio::io_服务io_服务; boost::asio::截止时间计时器(io_服务,boost::posix_时间::秒(5)); timer.async_wait([](自动…{/#)? std::cout正如Vinci所说,回调需要如下所示: void处理程序( con

为什么将lambda传递给asio asyn_wait()需要
auto…
参数,而传递函数不需要像
timer.async_wait(&print)那样的东西(即只需要函数名就可以了)

intmain()
{
boost::asio::io_服务io_服务;
boost::asio::截止时间计时器(io_服务,boost::posix_时间::秒(5));
timer.async_wait([](自动…{/#)?

std::cout正如Vinci所说,回调需要如下所示:

void处理程序(
const boost::system::error\u代码和错误//操作结果。
);
库保证回调只调用一次。 在后一种情况下,当计时器过期或等待操作被取消时,
error\u code
被设置为
boost::asio::error::operation\u aborted


来源:

它没有。它需要任何具有boost::system::error\u code参数的可调用函数……我忽略了确实具有error\u code作为参数的
print
原型。而且它看起来有点像
auto…
参数。您从哪里获得样本的?您声称“我们需要auto…”,但你没有说你为什么这么想that@sehe它来自于我简单地尝试了一下示例,去掉了原始的
auto…
,它没有编译,然后放回去编译。它很简单,但是
auto…
在当时有点误导,我忽略了打印原型,它确实有错误代码作为参数。而且它看起来稍微暗示一下
auto…
param。你的解释很有道理。我认为重要的一点是,参数存在是有原因的,使用auto…你正在失去(不完全,但这样做比写出来要复杂得多)检查操作是否完成的能力。在某些情况下,回调参数与您试图实现的目标无关,但为了确保能够确保,我建议阅读文档而不是忽略它们,因为这基本上就是您在这里所做的。
int main()
{
    boost::asio::io_service io_service;

    boost::asio::deadline_timer timer( io_service, boost::posix_time::seconds(5) );
    timer.async_wait( []( auto ... ){   //# ?
        std::cout << timestamp() << ": timer expired\n";
    });

    std::cout << timestamp() << ": calling io_service run\n";

    io_service.run();

    std::cout << timestamp() << ": done\n";

    return 0;
}