Я хочу связать перегруженную функцию, чтобы сделать 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>&)’
Так что я не знаю, что делать сейчас, у меня нет идей, где искать, чтобы найти ответ.
Я также извиняюсь за плохой английский, а не основной язык.
Спасибо за совет.
Так как 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);
^^^^^^^^^^^^^^^^
Других решений пока нет …