2017-06-29 119 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