Make zmqpp::socket::connect a std::future

Make zmqpp::socket::connect a std::future

本文关键字:std future socket zmqpp Make connect      更新时间:2023-10-16

我想绑定一个重载函数来创建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类的成员方法,所以需要通过指针或引用传递socket对象:

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

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);
^^^^^^^^^^^^^^^^