在asio spawn调用中使用成员函数提升绑定

时间:2018-04-22 14:32:53

标签: c++ boost boost-asio boost-bind

在下面的代码中我制作地图,
然后添加一些httprequest类实例,
然后我使用httprequest类的成员函数来调用boost asio spawn,
之前我问过这件事,并告诉它重复,
所以我读了帖子并做了一些挖掘,发现了以下内容:
我必须使用boost :: bind将成员函数及其参数转换为单个函数对象 并且在boost boost中我必须添加方法工作的实例的地址,并且方法的地址“如果从类定义或从使用的实例中获取方法的地址,请不要 然后添加参数。 我的地图有由共享指针表示的httprequests 当我写这个并编译它给了我很多与bind相关的错误 问题陈述在绑定文件中,代表我的代码,但没有说明有问题的部分。

这是代码:

std::map<std::string, boost::shared_ptr<HTTPRequest>> requests_variables;
std::map<std::string, boost::shared_ptr<HTTPResponse>> tasks;    

for (int hour = 0;hour < 24;hour++)
{
    std::stringstream ss_hour;
    ss_hour << std::setw(2) << std::setfill('0') << hour;
    std::string url_hour{ ss_hour.str() };
    std::stringstream().swap(ss_hour); // swap m with a default constructed stringstream
    URL = URL + url_hour +"h_ticks.bi5";

    std::string request_name = "request_" + std::to_string(hour);
    requests_variables[request_name] =  client.create_request(hour, URL);       
    boost::asio::spawn(client.get_service_reference(), boost::bind(&(*requests_variables[request_name]),&(*requests_variables[request_name]).execute, boost::placeholders::_1, tasks, request_name, requests_variables));

我试图多次操纵它以使其编译但是徒劳无功 绑定有问题,但我无法达到它 提前谢谢..

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但这使它成功了。

HTTPRequest* requst_z = requests_variables[request_name].get();

        boost::asio::spawn(client.get_service_reference(), boost::bind(&HTTPRequest::execute, requst_z, boost::placeholders::_1, tasks, request_name, requests_variables));