我有这个代码,我需要传递一个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?
bind默认情况下复制其所有参数.来自文档:
绑定的参数由返回的函数对象在内部复制和保存.例如,在以下代码中:
Run Code Online (Sandbox Code Playgroud)int i = 5; bind(f, i, _1);值的副本
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)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |