使用boost :: bind传递参数不起作用

xyb*_*rek 0 c++ boost

我有这个代码,我需要传递一个struct变量boost:bind

client(boost::asio::io_service& io_service,
            boost::asio::ssl::context& context,
            const std::string& server, const std::string& path, const std::string& port, RESTClient::response& resp)
            : resolver_(io_service),
            socket_(io_service, context)
        {
            resp.body = "first!"; // Works fine
            std::ostream request_stream(&request_);
            request_stream << "GET " << path << " HTTP/1.0\r\n";
            request_stream << "Host: " << server << "\r\n";
            request_stream << "Accept: */*\r\n";
            request_stream << "Connection: close\r\n\r\n";

            tcp::resolver::query query(server, port);
            resolver_.async_resolve(query,
                boost::bind(&client::handle_resolve, this,
                boost::asio::placeholders::error,
                boost::asio::placeholders::iterator,
                resp));
        }
Run Code Online (Sandbox Code Playgroud)

但是在这里我添加了一个不起作用的更改:

void handle_resolve(const boost::system::error_code& err,
    tcp::resolver::iterator endpoint_iterator, RESTClient::response &resp)
{
    (&resp)->body = "Haloo!!!"; // not working
}
Run Code Online (Sandbox Code Playgroud)

通话body后可以设置的方式是什么boost::bind

Bar*_*rry 5

bind默认情况下复制其所有参数.来自文档:

绑定的参数由返回的函数对象在内部复制和保存.例如,在以下代码中:

int i = 5;
bind(f, i, _1);
Run Code Online (Sandbox Code Playgroud)

值的副本i存储在函数对象中.boost::ref并且boost::cref可以用于使函数对象存储对象的引用,而不是副本

在这种情况下,将是:

boost::bind(&client::handle_resolve, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::iterator,
            boost::ref(resp)));
            ^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)