diff options
-rw-r--r-- | src/FbTk/MemFun.hh | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/FbTk/MemFun.hh b/src/FbTk/MemFun.hh index 63f922e..73134d2 100644 --- a/src/FbTk/MemFun.hh +++ b/src/FbTk/MemFun.hh | |||
@@ -276,6 +276,100 @@ MemFunSelectArg2(Object& obj, ReturnType (Object:: *action)(Arg1)) { | |||
276 | return MemFunSelectArgImpl<2, MemFun1<ReturnType, Object, Arg1>, ReturnType>(MemFun(obj, action)); | 276 | return MemFunSelectArgImpl<2, MemFun1<ReturnType, Object, Arg1>, ReturnType>(MemFun(obj, action)); |
277 | } | 277 | } |
278 | 278 | ||
279 | /// Creates a functor with a bound parameter | ||
280 | template<typename ReturnType, typename Object, typename Arg1> | ||
281 | class MemFunBind1 { | ||
282 | public: | ||
283 | typedef ReturnType (Object:: *Action)(Arg1); | ||
284 | |||
285 | MemFunBind1(Object& obj, Action action, Arg1 arg1): | ||
286 | m_obj(obj), | ||
287 | m_action(action), | ||
288 | m_arg1(arg1) { | ||
289 | } | ||
290 | |||
291 | ReturnType operator()() const { | ||
292 | return (m_obj.*m_action)(m_arg1); | ||
293 | } | ||
294 | |||
295 | private: | ||
296 | Object& m_obj; | ||
297 | Action m_action; | ||
298 | Arg1 m_arg1; | ||
299 | }; | ||
300 | |||
301 | /// Creates a functor with a bound parameter | ||
302 | template<typename ReturnType, typename Object, typename Arg1> | ||
303 | MemFunBind1<ReturnType, Object, Arg1> | ||
304 | MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1), Arg1 arg1 ) { | ||
305 | return MemFunBind1<ReturnType, Object, Arg1>(obj, action, arg1); | ||
306 | } | ||
307 | |||
308 | /// Creates a functor with a bound parameter | ||
309 | template<typename ReturnType, typename Object, typename Arg1, typename Arg2> | ||
310 | class MemFunBind2 { | ||
311 | public: | ||
312 | typedef ReturnType (Object:: *Action)(Arg1, Arg2); | ||
313 | |||
314 | MemFunBind2(Object& obj, Action action, Arg1 arg1, Arg2 arg2): | ||
315 | m_obj(obj), | ||
316 | m_action(action), | ||
317 | m_arg1(arg1), | ||
318 | m_arg2(arg2) { | ||
319 | } | ||
320 | |||
321 | ReturnType operator()() const { | ||
322 | return (m_obj.*m_action)(m_arg1, m_arg2); | ||
323 | } | ||
324 | |||
325 | private: | ||
326 | Object& m_obj; | ||
327 | Action m_action; | ||
328 | Arg1 m_arg1; | ||
329 | Arg2 m_arg2; | ||
330 | }; | ||
331 | |||
332 | /// Creates a functor with a bound parameter | ||
333 | template<typename ReturnType, typename Object, typename Arg1, typename Arg2> | ||
334 | MemFunBind2<ReturnType, Object, Arg1, Arg2> | ||
335 | MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1, Arg2), Arg1 arg1, Arg2 arg2 ) { | ||
336 | return MemFunBind2<ReturnType, Object, Arg1, Arg2>(obj, action, arg1, arg2); | ||
337 | } | ||
338 | |||
339 | /// Creates a functor with a bound parameter | ||
340 | template<typename ReturnType, typename Object, typename Arg1, typename Arg2, typename Arg3> | ||
341 | class MemFunBind3 { | ||
342 | public: | ||
343 | typedef ReturnType (Object:: *Action)(Arg1, Arg2, Arg3); | ||
344 | |||
345 | MemFunBind3(Object& obj, Action action, Arg1 arg1, Arg2 arg2, Arg3 arg3): | ||
346 | m_obj(obj), | ||
347 | m_action(action), | ||
348 | m_arg1(arg1), | ||
349 | m_arg2(arg2), | ||
350 | m_arg3(arg3) { | ||
351 | } | ||
352 | |||
353 | ReturnType operator()() const { | ||
354 | return (m_obj.*m_action)(m_arg1, m_arg2, m_arg3); | ||
355 | } | ||
356 | |||
357 | private: | ||
358 | Object& m_obj; | ||
359 | Action m_action; | ||
360 | Arg1 m_arg1; | ||
361 | Arg2 m_arg2; | ||
362 | Arg3 m_arg3; | ||
363 | }; | ||
364 | |||
365 | /// Creates a functor with a bound parameter | ||
366 | template<typename ReturnType, typename Object, typename Arg1, typename Arg2, typename Arg3> | ||
367 | MemFunBind2<ReturnType, Object, Arg1, Arg2> | ||
368 | MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1, Arg2, Arg3), | ||
369 | Arg1 arg1, Arg2 arg2, Arg3 arg3 ) { | ||
370 | return MemFunBind3<ReturnType, Object, Arg1, Arg2, Arg3>(obj, action, arg1, arg2, arg3); | ||
371 | } | ||
372 | |||
279 | } // namespace FbTk | 373 | } // namespace FbTk |
280 | 374 | ||
281 | #endif // FBTK_MEM_FUN_HH | 375 | #endif // FBTK_MEM_FUN_HH |