Сделайте zmqpp :: socket :: connect 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 перегруженная функция
Итак, я включил функцию подключения.

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>&)’

Так что я не знаю, что делать сейчас, у меня нет идей, где искать, чтобы найти ответ.
Я также извиняюсь за плохой английский, а не основной язык.

Спасибо за совет.

0

Решение

Так как connect является членом метода socket класс вам нужно пройти 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);
^^^^^^^^^^^^^^^^
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]