From 19ac8e40d85235328e0e2c7c428a2d3e1e86872c Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Thu, 5 May 2011 17:07:32 +0200 Subject: Added FbTk::MemFunBind - a functor which binds all arguments of a function --- src/FbTk/MemFun.hh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) 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)) { return MemFunSelectArgImpl<2, MemFun1, ReturnType>(MemFun(obj, action)); } +/// Creates a functor with a bound parameter +template +class MemFunBind1 { +public: + typedef ReturnType (Object:: *Action)(Arg1); + + MemFunBind1(Object& obj, Action action, Arg1 arg1): + m_obj(obj), + m_action(action), + m_arg1(arg1) { + } + + ReturnType operator()() const { + return (m_obj.*m_action)(m_arg1); + } + +private: + Object& m_obj; + Action m_action; + Arg1 m_arg1; +}; + +/// Creates a functor with a bound parameter +template +MemFunBind1 +MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1), Arg1 arg1 ) { + return MemFunBind1(obj, action, arg1); +} + +/// Creates a functor with a bound parameter +template +class MemFunBind2 { +public: + typedef ReturnType (Object:: *Action)(Arg1, Arg2); + + MemFunBind2(Object& obj, Action action, Arg1 arg1, Arg2 arg2): + m_obj(obj), + m_action(action), + m_arg1(arg1), + m_arg2(arg2) { + } + + ReturnType operator()() const { + return (m_obj.*m_action)(m_arg1, m_arg2); + } + +private: + Object& m_obj; + Action m_action; + Arg1 m_arg1; + Arg2 m_arg2; +}; + +/// Creates a functor with a bound parameter +template +MemFunBind2 +MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1, Arg2), Arg1 arg1, Arg2 arg2 ) { + return MemFunBind2(obj, action, arg1, arg2); +} + +/// Creates a functor with a bound parameter +template +class MemFunBind3 { +public: + typedef ReturnType (Object:: *Action)(Arg1, Arg2, Arg3); + + MemFunBind3(Object& obj, Action action, Arg1 arg1, Arg2 arg2, Arg3 arg3): + m_obj(obj), + m_action(action), + m_arg1(arg1), + m_arg2(arg2), + m_arg3(arg3) { + } + + ReturnType operator()() const { + return (m_obj.*m_action)(m_arg1, m_arg2, m_arg3); + } + +private: + Object& m_obj; + Action m_action; + Arg1 m_arg1; + Arg2 m_arg2; + Arg3 m_arg3; +}; + +/// Creates a functor with a bound parameter +template +MemFunBind2 +MemFunBind( Object& obj, ReturnType (Object:: *action)(Arg1, Arg2, Arg3), + Arg1 arg1, Arg2 arg2, Arg3 arg3 ) { + return MemFunBind3(obj, action, arg1, arg2, arg3); +} + } // namespace FbTk #endif // FBTK_MEM_FUN_HH -- cgit v0.11.2