00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <string>
00029 #include "Aria.h"
00030
00031
00037
00038
00039
00040
00041 class CallbackContainer
00042 {
00043 public:
00044
00045 void callback1();
00046 void callback2(int i);
00047 bool callback3(const char *str);
00048 };
00049
00050 void CallbackContainer::callback1()
00051 {
00052 printf("CallbackContainer::callback1 called.\n");
00053 }
00054
00055 void CallbackContainer::callback2(int i)
00056 {
00057 printf("CallbackContainer::callback2 called with argument of '%d'\n", i);
00058 }
00059
00060 bool CallbackContainer::callback3(const char *str)
00061 {
00062 printf("CallbackContainer::callback3 called with argument of '%s'.\n", str);
00063 return(true);
00064 }
00065
00066
00067
00068
00069
00070 void globalCallback()
00071 {
00072 printf("globalCallback() called.\n");
00073 }
00074
00075
00076
00077
00078
00079
00080
00081
00082 class DriverClass
00083 {
00084 public:
00085
00086 void invokeFunctors();
00087
00088 void setCallback1(ArFunctor *func) {myFunc1=func;}
00089 void setCallback2(ArFunctor1<int> *func) {myFunc2=func;}
00090 void setCallback3(ArRetFunctor1<bool, const char *> *func) {myFunc3=func;}
00091
00092
00093 protected:
00094
00095 ArFunctor *myFunc1;
00096 ArFunctor1<int> *myFunc2;
00097 ArRetFunctor1<bool, const char *> *myFunc3;
00098 };
00099
00100 void DriverClass::invokeFunctors()
00101 {
00102 bool ret;
00103
00104 printf("Invoking functor1... ");
00105 myFunc1->invoke();
00106
00107 printf("Invoking functor2... ");
00108 myFunc2->invoke(23);
00109
00110
00111
00112
00113
00114
00115
00116
00117 printf("Invoking functor3... ");
00118 ret=myFunc3->invokeR("This is a string argument");
00119 if (ret)
00120 printf("\t-> functor3 returned 'true'\n");
00121 else
00122 printf("\t-> functor3 returned 'false'\n");
00123 }
00124
00125 int main()
00126 {
00127 CallbackContainer cb;
00128 DriverClass driver;
00129
00130 ArFunctorC<CallbackContainer> functor1(cb, &CallbackContainer::callback1);
00131 ArFunctor1C<CallbackContainer, int> functor2(cb, &CallbackContainer::callback2);
00132 ArRetFunctor1C<bool, CallbackContainer, const char *>
00133 functor3(cb, &CallbackContainer::callback3);
00134
00135 driver.setCallback1(&functor1);
00136 driver.setCallback2(&functor2);
00137 driver.setCallback3(&functor3);
00138
00139 driver.invokeFunctors();
00140
00141
00142 ArGlobalFunctor globalFunctor(&globalCallback);
00143 printf("Invoking globalFunctor... ");
00144 globalFunctor.invoke();
00145
00146
00147
00148
00149 ArFunctor1C<CallbackContainer, int> functor4(cb, &CallbackContainer::callback2, 42);
00150 printf("Invoking functor with constant argument... ");
00151 functor4.invoke();
00152
00153
00154
00155
00156 ArFunctor* baseFunctor = &functor4;
00157 printf("Invoking downcast functor... ");
00158 baseFunctor->invoke();
00159
00160
00161 return(0);
00162 }