使zmqpp :: socket :: connect std :: future

时间:2018-08-01 09:59:21

标签: c++ c++11 zeromq stdbind std-future

我想绑定一个重载函数来制作一个std::future
zmqpp::socket::connect的创建方式如下:

void    connect (endpoint_t const &endpoint)


我做的第一件事是:
auto binded_connect = std::bind(&zmqpp::socket::connect, socket, endpoint);

但这很糟糕,因为zmqpp::socket::connect是一个重载函数。
所以我强制转换了connect函数。

auto binded_connect = std::bind(static_cast<void(zmqpp::socket::*)(zmqpp::endpoint_t const&)>(&zmqpp::socket::connect), socket, endpoint);


问题是g ++不喜欢。
他说了很多有关元组的事情,但我认为最重要的是:

/usr/include/c++/8/functional:467:70: error: no matching function for call to ‘std::tuple<zmqpp::socket, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::tuple(zmqpp::socket&, const std::__cxx11::basic_string<char>&)’

所以我现在真的不知道该怎么办,我不知道在哪里寻找答案。
我也很抱歉英语不好,不是主要语言。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

由于connectsocket类的成员方法,您需要通过指针或引用传递socket对象:

  

当调用指向非静态成员函数的指针或指向非静态数据成员的指针时,第一个参数必须是对其成员将被访问的对象的引用或指针:-> more here

auto binded_connect = std::bind(static_cast<void(zmqpp::socket::*)(zmqpp::endpoint_t const&)>(&zmqpp::socket::connect), 
       &socket, endpoint);
       ^^^^^^^^
or
auto binded_connect = std::bind(static_cast<void(zmqpp::socket::*)(zmqpp::endpoint_t const&)>(&zmqpp::socket::connect), 
       std::ref(socket), endpoint);
       ^^^^^^^^^^^^^^^^