C ++将参数传递给lambda函数

时间:2017-06-29 13:45:54

标签: c++ lambda

这是我第一次在C ++中使用lambda函数,我需要传递一个值才能在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();
        }           
    });
}

2 个答案:

答案 0 :(得分:6)

我猜你应该按价值捕捉并改变:

[this]

为:

[this, seq_msg]

答案 1 :(得分:1)

您可以使用bind

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