2017-06-29 117 views
0

这是第一次使用lambda函数在C++,我需要值传递给lambda函数的主体内使用:C++通参数lambda函数

在上面的代码我需要通过INT参数seq_msg:

void do_connect(tcp::resolver::iterator endpoint_iterator, int seq_msg) 
{ 
    boost::asio::async_connect(socket_, endpoint_iterator, [this](boost::system::error_code ec, tcp::resolver::iterator) 
    { 
     if (!ec) 
     { 
      send_message(seq_msg); 

      do_read_header(); 
     }   
    }); 
} 

回答

6

我想你应该按价值计算,变化捕捉它:

[this] 

到:

[this, seq_msg] 
1

可以使用绑定

void do_connect(tcp::resolver::iterator endpoint_iterator, int seq_msg) 
{ 
    auto cb = [this](boost::system::error_code ec, tcp::resolver::iterator, int seq) 
    { 
     if (!ec) 
     { 
      send_message(seq_msg); 

      do_read_header(); 
     }   
    } 
    boost::asio::async_connect(socket_, endpoint_iterator, std::bind(cb, std::placeholders::_1, std::placeholders::_2, seq_msg)); 
} 

或者只是捕捉seq_msg

+0

谢谢大家。我测试了这两个选项并且都可以工作现在,我只需要了解它们之间是否有重要的区别。 – Neumann

+0

如果您使用lambda作为回调函数,那么毫无疑问捕获一个额外的参数要容易得多。绑定方法允许您从其他类函数,函数指针或其他函数对象创建函数对象。 – Jeka