diff --git a/src/kits/tracker/FunctionObject.h b/src/kits/tracker/FunctionObject.h index 5639742ad8..bcd8f6e6ef 100644 --- a/src/kits/tracker/FunctionObject.h +++ b/src/kits/tracker/FunctionObject.h @@ -69,6 +69,7 @@ private: P p; }; + template<> class ParameterBinder { public: @@ -86,6 +87,7 @@ private: BEntry p; }; + template<> class ParameterBinder { public: @@ -105,6 +107,7 @@ private: entry_ref p; }; + template<> class ParameterBinder { public: @@ -122,6 +125,7 @@ private: node_ref p; }; + template<> class ParameterBinder { public: @@ -149,12 +153,14 @@ private: BMessage *p; }; + class FunctionObject { public: virtual void operator()() = 0; virtual ~FunctionObject() {} }; + template class FunctionObjectWithResult : public FunctionObject { public: @@ -165,6 +171,7 @@ protected: R result; }; + template class SingleParamFunctionObject : public FunctionObject { public: @@ -184,6 +191,7 @@ private: ParameterBinder p1; }; + template class SingleParamFunctionObjectWithResult : public FunctionObjectWithResult { public: @@ -202,6 +210,7 @@ private: ParameterBinder p1; }; + template class TwoParamFunctionObject : public FunctionObject { public: @@ -246,6 +255,7 @@ private: ParameterBinder p3; }; + template class ThreeParamFunctionObjectWithResult : public FunctionObjectWithResult { public: @@ -269,6 +279,7 @@ private: ParameterBinder p3; }; + template class FourParamFunctionObject : public FunctionObject { public: @@ -293,6 +304,7 @@ private: ParameterBinder p4; }; + template class FourParamFunctionObjectWithResult : public FunctionObjectWithResult { public: @@ -318,6 +330,7 @@ private: ParameterBinder p4; }; + template class PlainMemberFunctionObject : public FunctionObject { public: @@ -335,6 +348,7 @@ private: T *target; }; + template class PlainLockingMemberFunctionObject : public FunctionObject { public: @@ -358,6 +372,7 @@ private: BMessenger messenger; }; + template class PlainMemberFunctionObjectWithResult : public FunctionObjectWithResult { public: @@ -376,6 +391,7 @@ private: T *target; }; + template class SingleParamMemberFunctionObject : public FunctionObject { public: @@ -395,6 +411,7 @@ private: ParameterBinder p1; }; + template class TwoParamMemberFunctionObject : public FunctionObject { public: @@ -439,6 +456,7 @@ protected: ParameterBinder p1; }; + template class TwoParamMemberFunctionObjectWithResult : public FunctionObjectWithResult { public: @@ -462,6 +480,7 @@ protected: ParameterBinder p2; }; + // convenience factory functions // NewFunctionObject // NewMemberFunctionObject @@ -477,6 +496,7 @@ NewFunctionObject(void (*function)(Param1), Param1 p1) return new SingleParamFunctionObject(function, p1); } + template TwoParamFunctionObject * NewFunctionObject(void (*function)(Param1, Param2), Param1 p1, Param2 p2) @@ -484,6 +504,7 @@ NewFunctionObject(void (*function)(Param1, Param2), Param1 p1, Param2 p2) return new TwoParamFunctionObject(function, p1, p2); } + template ThreeParamFunctionObject * NewFunctionObject(void (*function)(Param1, Param2, Param3), @@ -492,6 +513,7 @@ NewFunctionObject(void (*function)(Param1, Param2, Param3), return new ThreeParamFunctionObject(function, p1, p2, p3); } + template PlainMemberFunctionObject * NewMemberFunctionObject(void (T::*function)(), T *onThis) @@ -499,6 +521,7 @@ NewMemberFunctionObject(void (T::*function)(), T *onThis) return new PlainMemberFunctionObject(function, onThis); } + template SingleParamMemberFunctionObject * NewMemberFunctionObject(void (T::*function)(Param1), T *onThis, Param1 p1) @@ -506,6 +529,7 @@ NewMemberFunctionObject(void (T::*function)(Param1), T *onThis, Param1 p1) return new SingleParamMemberFunctionObject(function, onThis, p1); } + template TwoParamMemberFunctionObject * NewMemberFunctionObject(void (T::*function)(Param1, Param2), T *onThis, @@ -515,6 +539,7 @@ NewMemberFunctionObject(void (T::*function)(Param1, Param2), T *onThis, p1, p2); } + template TwoParamMemberFunctionObjectWithResult * NewMemberFunctionObjectWithResult(R (T::*function)(Param1, Param2), @@ -524,6 +549,7 @@ NewMemberFunctionObjectWithResult(R (T::*function)(Param1, Param2), (function, onThis, p1, p2); } + template PlainLockingMemberFunctionObject * NewLockingMemberFunctionObject(void (HandlerOrSubclass::*function)(),