Guest User

Untitled

a guest
Aug 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.42 KB | None | 0 0
  1. bind two function objects
  2. #include <string>
  3. #include <functional>
  4.  
  5. using std::bind;
  6. using std::string;
  7. using std::function;
  8.  
  9. class Service
  10. {
  11. public:
  12. void listen( const function< void ( const string&, const string&, const string&, const string& ) > const& login )
  13. {
  14.  
  15. }
  16. };
  17.  
  18. class Threadpool
  19. {
  20. public:
  21. void schedule( const function< void ( void ) > const& task )
  22. {
  23.  
  24. }
  25. };
  26.  
  27. class Server
  28. {
  29. public:
  30. Server( )
  31. {
  32. Threadpool* threadpool = new Threadpool( );
  33.  
  34. Service* service = new Service( );
  35.  
  36. threadpool->schedule( bind( &Service::listen, service, mem_fn( &Server::subscribe ) ) );
  37. }
  38.  
  39. void subscribe( const string& username, const string& password, const string& hostname, const string& data )
  40. {
  41.  
  42. }
  43. };
  44.  
  45. int main ( int argc, char** argv )
  46. {
  47. Server server( );
  48. }
  49.  
  50. In file included from main.cpp:3:
  51. /usr/include/c++/v1/functional:892:22: error: no matching function for call to '__invoke'
  52. return __invoke(__f_, _STD::forward<_ArgTypes>(__args)...);
  53. ^~~~~~~~
  54. /usr/include/c++/v1/__functional_base:437:12: note: in instantiation of function template specialization 'std::__1::__mem_fn<void
  55. (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  56. const std::__1::basic_string<char> &)>::operator()<const std::__1::basic_string<char> &, const std::__1::basic_string<char>
  57. &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>' requested here
  58. return _STD::forward<_F>(__f)(_STD::forward<_T>(__t)...);
  59. ^
  60. /usr/include/c++/v1/__config:153:14: note: instantiated from:
  61. #define _STD std::_LIBCPP_NAMESPACE
  62. ^
  63. /usr/include/c++/v1/functional:1054:12: note: in instantiation of function template specialization
  64. 'std::__1::__invoke<std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const
  65. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &, const
  66. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  67. std::__1::basic_string<char> &>' requested here
  68. return __invoke(__f_.first(), _STD::forward<_ArgTypes>(__arg)...);
  69. ^
  70. /usr/include/c++/v1/functional:1256:26: note: in instantiation of member function
  71. 'std::__1::__function::__func<std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const
  72. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)>,
  73. std::__1::allocator<std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const
  74. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> >, void (const
  75. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  76. std::__1::basic_string<char> &)>::operator()' requested here
  77. ::new (__f_) _FF(_STD::move(__f));
  78. ^
  79. /usr/include/c++/v1/__functional_base:349:47: note: in instantiation of function template specialization 'std::__1::function<void
  80. (const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  81. std::__1::basic_string<char> &)>::function<std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const
  82. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> >' requested
  83. here
  84. return ((*_STD::forward<_T1>(__t1)).*__f)(_STD::forward<_Arg>(__arg)...);
  85. ^
  86. /usr/include/c++/v1/__config:153:14: note: instantiated from:
  87. #define _STD std::_LIBCPP_NAMESPACE
  88. ^
  89. /usr/include/c++/v1/functional:1652:12: note: in instantiation of function template specialization 'std::__1::__invoke<void,
  90. Service, Service *&, const std::__1::function<void (const std::__1::basic_string<char> &, const std::__1::basic_string<char>
  91. &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &, std::__1::__mem_fn<void (Server::*)(const
  92. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  93. std::__1::basic_string<char> &)> &>' requested here
  94. return __invoke(__f, __mu(get<_Indx>(__bound_args), __args)...);
  95. ^
  96. /usr/include/c++/v1/functional:1681:20: note: in instantiation of function template specialization 'std::__1::__apply_functor<void
  97. (Service::*)(const std::__1::function<void (const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  98. std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &), std::__1::tuple<Service *, std::__1::__mem_fn<void
  99. (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  100. const std::__1::basic_string<char> &)> >, 0, 1, std::__1::tuple<> >' requested here
  101. return __apply_functor(__f_, __bound_args_, __indices(),
  102. ^
  103. /usr/include/c++/v1/__functional_base:437:12: note: in instantiation of function template specialization 'std::__1::__bind<void
  104. (Service::*)(const std::__1::function<void (const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  105. std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &), Service *, std::__1::__mem_fn<void
  106. (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  107. const std::__1::basic_string<char> &)> >::operator()<>' requested here
  108. return _STD::forward<_F>(__f)(_STD::forward<_T>(__t)...);
  109. ^
  110. /usr/include/c++/v1/__config:153:14: note: instantiated from:
  111. #define _STD std::_LIBCPP_NAMESPACE
  112. ^
  113. /usr/include/c++/v1/functional:1054:12: note: in instantiation of function template specialization
  114. 'std::__1::__invoke<std::__1::__bind<void (Service::*)(const std::__1::function<void (const std::__1::basic_string<char> &,
  115. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &),
  116. Service *, std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  117. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> > &, >' requested here
  118. return __invoke(__f_.first(), _STD::forward<_ArgTypes>(__arg)...);
  119. ^
  120. /usr/include/c++/v1/functional:1256:26: note: in instantiation of member function
  121. 'std::__1::__function::__func<std::__1::__bind<void (Service::*)(const std::__1::function<void (const
  122. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  123. std::__1::basic_string<char> &)> &), Service *, std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &,
  124. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> >,
  125. std::__1::allocator<std::__1::__bind<void (Service::*)(const std::__1::function<void (const std::__1::basic_string<char> &,
  126. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &),
  127. Service *, std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  128. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> > >, void ()>::operator()' requested here
  129. ::new (__f_) _FF(_STD::move(__f));
  130. ^
  131. main.cpp:36:31: note: in instantiation of function template specialization 'std::__1::function<void
  132. ()>::function<std::__1::__bind<void (Service::*)(const std::__1::function<void (const std::__1::basic_string<char> &, const
  133. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> &), Service *,
  134. std::__1::__mem_fn<void (Server::*)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const
  135. std::__1::basic_string<char> &, const std::__1::basic_string<char> &)> > >' requested here
  136. threadpool->schedule( bind( &Service::listen, service, mem_fn( &Server::subscribe ) ) );
  137. ^
  138. /usr/include/c++/v1/__functional_base:293:1: note: candidate template ignored: substitution failure [with _R = void, _T = Server,
  139. _T1 = const std::__1::basic_string<char> &, _Param = <const std::__1::basic_string<char> &, const
  140. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>, _Arg = <const
  141. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>]
  142. __invoke(_R (_T::*__f)(_Param...), _T1&& __t1, _Arg&& ...__arg)
  143. ^
  144. /usr/include/c++/v1/__functional_base:306:1: note: candidate template ignored: failed template argument deduction
  145. __invoke(_R (_T::*__f)(_Param...) const, _T1&& __t1, _Arg&& ...__arg)
  146. ^
  147. /usr/include/c++/v1/__functional_base:319:1: note: candidate template ignored: failed template argument deduction
  148. __invoke(_R (_T::*__f)(_Param...) volatile, _T1&& __t1, _Arg&& ...__arg)
  149. ^
  150. /usr/include/c++/v1/__functional_base:332:1: note: candidate template ignored: failed template argument deduction
  151. __invoke(_R (_T::*__f)(_Param...) const volatile, _T1&& __t1, _Arg&& ...__arg)
  152. ^
  153. /usr/include/c++/v1/__functional_base:347:1: note: candidate template ignored: substitution failure [with _R = void, _T = Server,
  154. _T1 = const std::__1::basic_string<char> &, _Param = <const std::__1::basic_string<char> &, const
  155. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>, _Arg = <const
  156. std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>]
  157. __invoke(_R (_T::*__f)(_Param...), _T1&& __t1, _Arg&& ...__arg)
  158. ^
  159. /usr/include/c++/v1/__functional_base:360:1: note: candidate template ignored: failed template argument deduction
  160. __invoke(_R (_T::*__f)(_Param...) const, _T1&& __t1, _Arg&& ...__arg)
  161. ^
  162. /usr/include/c++/v1/__functional_base:373:1: note: candidate template ignored: failed template argument deduction
  163. __invoke(_R (_T::*__f)(_Param...) volatile, _T1&& __t1, _Arg&& ...__arg)
  164. ^
  165. /usr/include/c++/v1/__functional_base:386:1: note: candidate template ignored: failed template argument deduction
  166. __invoke(_R (_T::*__f)(_Param...) const volatile, _T1&& __t1, _Arg&& ...__arg)
  167. ^
  168. /usr/include/c++/v1/__functional_base:400:1: note: candidate function template not viable: requires 2 arguments, but 5 were
  169. provided
  170. __invoke(_R _T::* __f, _T1&& __t1)
  171. ^
  172. /usr/include/c++/v1/__functional_base:425:1: note: candidate function template not viable: requires 2 arguments, but 5 were
  173. provided
  174. __invoke(_R _T::* __f, _T1&& __t1)
  175. ^
  176. /usr/include/c++/v1/__functional_base:435:1: note: candidate template ignored: substitution failure [with _F = void
  177. (Server::*&)(const std::__1::basic_string<char> &, const std::__1::basic_string<char> &, const std::__1::basic_string<char>
  178. &, const std::__1::basic_string<char> &), _T = <const std::__1::basic_string<char> &, const std::__1::basic_string<char> &,
  179. const std::__1::basic_string<char> &, const std::__1::basic_string<char> &>]
  180. __invoke(_F&& __f, _T&& ...__t)
  181. ^
  182. 1 error generated.
  183.  
  184. bind( &Service::listen, service, function< void ( const string&, const string&,
  185. const string&, const string& ) >
  186. (something goes here) )
  187.  
  188. using namespace std::placeholders;
  189. threadpool->schedule(
  190. bind( &Service::listen, service,
  191. function< void ( const string&, const string&,
  192. const string&, const string& ) >(
  193. bind( &Server::subscribe, this, _1, _2, _3, _4 ) ) ) );
  194.  
  195. #include <string>
  196. #include <functional>
  197. #include <iostream>
  198.  
  199. using std::bind;
  200. using std::string;
  201. using std::function;
  202.  
  203. class Service
  204. {
  205. public:
  206. void listen( function< void ( const string&,
  207. const string&,
  208. const string&,
  209. const string& ) > const& login )
  210. {
  211. std::cout << "in listenn";
  212. login("w", "x", "y", "z");
  213. }
  214. };
  215.  
  216. class Threadpool
  217. {
  218. public:
  219. void schedule( const function< void ( void ) > const& task )
  220. {
  221. std::cout << "in schedulen";
  222. task();
  223. }
  224. };
  225.  
  226. class Server
  227. {
  228. public:
  229. Server()
  230. {
  231. Threadpool* threadpool = new Threadpool( );
  232. Service* service = new Service( );
  233.  
  234. using namespace std::placeholders;
  235. threadpool->schedule(
  236. bind( &Service::listen, service,
  237. function< void ( const string&, const string&,
  238. const string&, const string& ) >(
  239. bind( &Server::subscribe, this, _1, _2, _3, _4 ) ) ) );
  240. }
  241.  
  242. void subscribe( const string& username, const string& password,
  243. const string& hostname, const string& data )
  244. {
  245. std::cout << "in subscriben";
  246. std::cout << username << 'n';
  247. std::cout << password << 'n';
  248. std::cout << hostname << 'n';
  249. std::cout << data << 'n';
  250. }
  251. };
  252.  
  253. int main ()
  254. {
  255. Server server;
  256. }
  257.  
  258. in schedule
  259. in listen
  260. in subscribe
  261. w
  262. x
  263. y
  264. z
  265.  
  266. #include <string>
  267. #include <iostream>
  268. #include <functional>
  269.  
  270. using std::cout;
  271. using std::endl;
  272. using std::bind;
  273. using std::string;
  274. using std::function;
  275. using std::placeholders::_1;
  276. using std::placeholders::_2;
  277. using std::placeholders::_3;
  278. using std::placeholders::_4;
  279. using std::placeholders::_5;
  280.  
  281. class Service
  282. {
  283. public:
  284. void listen( const function< void ( const string&, const string&, const string&, const string& ) > const& login )
  285. {
  286. login( "ben", "crowhurst", "localhost", "some data" );
  287. }
  288. };
  289.  
  290. class Threadpool
  291. {
  292. public:
  293. Threadpool( ) { }
  294.  
  295. void schedule( const function< void ( ) > const& task )
  296. {
  297. cout << "in schedule" << endl;
  298.  
  299. task( );
  300. }
  301. };
  302.  
  303. class Server
  304. {
  305. public:
  306. Server( )
  307. {
  308. Threadpool* threadpool = new Threadpool( );
  309.  
  310. Service* service = new Service( );
  311.  
  312. function<void (const string&, const string&, const string&, const string&)> f1 =
  313. bind( &Server::subscribe, this, _1, _2, _3, _4 );
  314.  
  315. auto f2 = bind( &Service::listen, service, f1 );
  316.  
  317. threadpool->schedule( f2 );
  318. }
  319.  
  320. void subscribe( const string& username, const string& password, const string& hostname, const string& data )
  321. {
  322. cout << "username: " << username << endl;
  323. cout << "password: " << password << endl;
  324. cout << "hostname: " << hostname << endl;
  325. cout << " data: " << data << endl;
  326. }
  327. };
  328.  
  329. int main ( int argc, char** argv )
  330. {
  331. cout << "in main" << endl;
  332.  
  333. Server* server = new Server( );
  334. }
  335.  
  336. typedef std::function<void(void)> RequestFunc;
  337. typedef std::function<void(const std::string&, const std::string&)> DispatchFunc;
  338.  
  339. class A {
  340. std::string name;
  341. std::string location;
  342. public:
  343. void deliver( const DispatchFunc& request )
  344. {
  345. request( name, location );
  346. }
  347. };
  348.  
  349. class B {
  350. public:
  351. void dispatch( const DispatchFunc& request )
  352. {
  353. };
  354. };
  355.  
  356. B b;
  357. auto func1 = boost::bind( &B::dispatch, b );
  358.  
  359. A a;
  360. auto func2 = boost::bind( &A::deliver, a, func1);
Add Comment
Please, Sign In to add comment