将 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>&)’
所以我真的不知道现在该做什么,我不知道在哪里搜索才能找到答案。
我也很抱歉英语不好,不是主要语言。
谢谢指教。
因为connect
是socket
的成员方法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);
^^^^^^^^^^^^^^^^
我想绑定一个重载函数来制作一个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>&)’
所以我真的不知道现在该做什么,我不知道在哪里搜索才能找到答案。
我也很抱歉英语不好,不是主要语言。
谢谢指教。
因为connect
是socket
的成员方法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);
^^^^^^^^^^^^^^^^