【发布时间】:2013-10-10 08:51:31
【问题描述】:
我正在学习 Boost.Asio,这是我正在谈论的代码: Link to code
我编写的以下代码似乎是相同的,并且可以正常工作: (使用“-lboost_system”和“-std=c++11”编译)
#include<iostream>
#include<boost/asio.hpp>
#include<functional>
#include<boost/date_time/posix_time/posix_time.hpp>
typedef const boost::system::error_code cbse;
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io,boost::posix_time::seconds(1));
int count=0;
std::function<void(cbse&)>
cb=[&](cbse&)
{
if(count<5)
{
std::cout<<"foo"<<std::endl;
count++;
t.expires_at(t.expires_at()+boost::posix_time::seconds(1));
t.async_wait(cb);
}
else
std::cout<<"done"<<std::endl;
};
t.async_wait(cb);
std::cout<<"Hello"<<std::endl;
io.run();
return 0;
}
我是否遗漏了一些重要的区别?
直观地,递归调用回调对我来说似乎不是一个好主意,是不是为了解释而在文档中给出的?
【问题讨论】:
-
如果你使用c++11,值得使用类型推导:
auto cb = .... -
@IgorR.: 不会编译,因为在推导类型之前使用了对象。
-
对,错过了这一点...
标签: c++ boost c++11 lambda boost-asio