将 zmqpp::socket::connect 设为 std::future

Make zmqpp::socket::connect a 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>&)’

所以我真的不知道现在该做什么,我不知道在哪里搜索才能找到答案。
我也很抱歉英语不好,不是主要语言。

谢谢指教。

因为connectsocket的成员方法class你需要通过指针或引用传递socket对象:

when invoking a pointer to non-static member function or pointer to non-static data member, the first argument has to be a reference or pointer to an object whose member will be accessed: -> 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);
       ^^^^^^^^^^^^^^^^