我想绑定一个重载函数来制作一个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>&)’
所以我现在真的不知道该怎么办,我不知道在哪里寻找答案。
我也很抱歉英语不好,不是主要语言。
感谢您的建议。
答案 0 :(得分:0)
由于connect
是socket
类的成员方法,您需要通过指针或引用传递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);
^^^^^^^^^^^^^^^^