VTK
FunctionPointers.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: FunctionPoilters.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15#ifndef __FunctionPointers_h_
16#define __FunctionPointers_h_
17
18// Arbitrary functors
20{
21public:
22 virtual ~BaseFunctor() { }
23 virtual void ExecVoid() = 0;
24};
25
26template <typename TReturn>
28{
29public:
30 virtual ~Functor0Args() { }
31 virtual void ExecVoid()
32 {
33 (*this)();
34 }
35
36 virtual TReturn operator() () = 0;
37};
38
39template<typename TObject, typename TReturn>
40class MemberFunction0Args : public Functor0Args<TReturn>
41{
42public:
43 typedef TReturn (TObject::*TFunctor)(void);
44 MemberFunction0Args(TObject *instance, TFunctor functionPtr)
45 : Instance(instance), FunctionPtr(functionPtr)
46 { }
47
49
50 virtual TReturn operator() ()
51 { return (this->Instance->*this->FunctionPtr)(); }
52
53private:
54 TObject *Instance;
55 TFunctor FunctionPtr;
56};
57
58template<typename TObject, typename TReturn, typename TArg1>
59class MemberFunction1Arg : public Functor0Args<TReturn>
60{
61public:
62 typedef TReturn (TObject::*TFunctor)(TArg1);
63 MemberFunction1Arg(TObject *instance, TFunctor functionPtr, TArg1 arg1)
64 : Instance(instance), FunctionPtr(functionPtr), Arg1(arg1)
65 { }
66
67 virtual ~MemberFunction1Arg() { }
68
69 virtual TReturn operator() ()
70 { return (this->Instance->*this->FunctionPtr)(this->Arg1); }
71
72private:
73 TObject *Instance;
74 TFunctor FunctionPtr;
75 TArg1 Arg1;
76};
77
78template<typename TObject, typename TReturn, typename TArg1, typename TArg2>
79class MemberFunction2Args : public Functor0Args<TReturn>
80{
81public:
82 typedef TReturn (TObject::*TFunctor)(TArg1, TArg2);
83 MemberFunction2Args(TObject *instance, TFunctor functionPtr,
84 TArg1 arg1, TArg2 arg2)
85 : Instance(instance), FunctionPtr(functionPtr), Arg1(arg1), Arg2(arg2)
86 { }
87
89
90 virtual TReturn operator() ()
91 { return (this->Instance->*this->FunctionPtr)(this->Arg1, this->Arg2); }
92
93private:
94 TObject *Instance;
95 TFunctor FunctionPtr;
96 TArg1 Arg1;
97 TArg2 Arg2;
98};
99
100template<typename TObject, typename TReturn, typename TArg1, typename TArg2,
101 typename TArg3>
102class MemberFunction3Args : public Functor0Args<TReturn>
103{
104public:
105 typedef TReturn (TObject::*TFunctor)(TArg1, TArg2, TArg3);
106 MemberFunction3Args(TObject *instance, TFunctor functionPtr,
107 TArg1 arg1, TArg2 arg2, TArg3 arg3)
108 : Instance(instance), FunctionPtr(functionPtr), Arg1(arg1), Arg2(arg2),
109 Arg3(arg3)
110 { }
111
113
114 virtual TReturn operator() ()
115 {
116 return (this->Instance->*this->FunctionPtr)
117 (this->Arg1, this->Arg2, this->Arg3);
118 }
119
120private:
121 TObject *Instance;
122 TFunctor FunctionPtr;
123 TArg1 Arg1;
124 TArg2 Arg2;
125 TArg3 Arg3;
126};
127
128#endif
129// VTK-HeaderTest-Exclude: FunctionPointers.h
virtual void ExecVoid()=0
virtual ~BaseFunctor()
virtual void ExecVoid()
virtual TReturn operator()()=0
virtual ~Functor0Args()
virtual ~MemberFunction0Args()
TReturn(TObject::* TFunctor)(void)
MemberFunction0Args(TObject *instance, TFunctor functionPtr)
virtual TReturn operator()()
virtual TReturn operator()()
MemberFunction1Arg(TObject *instance, TFunctor functionPtr, TArg1 arg1)
virtual ~MemberFunction1Arg()
TReturn(TObject::* TFunctor)(TArg1)
MemberFunction2Args(TObject *instance, TFunctor functionPtr, TArg1 arg1, TArg2 arg2)
virtual ~MemberFunction2Args()
virtual TReturn operator()()
TReturn(TObject::* TFunctor)(TArg1, TArg2)
MemberFunction3Args(TObject *instance, TFunctor functionPtr, TArg1 arg1, TArg2 arg2, TArg3 arg3)
virtual TReturn operator()()
TReturn(TObject::* TFunctor)(TArg1, TArg2, TArg3)
virtual ~MemberFunction3Args()