2 /* Do not edit! -- generated file */
3 #ifndef _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_
4 #define _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_
5 #include <sigc++/adaptors/adaptor_trait.h>
9 /** Adaptor that perform a C-style cast on the return value of a functor.
10 * Use the convenience function sigc::retype_return() to create an instance of retype_return_functor.
12 * The following template arguments are used:
13 * - @e T_return Target type of the C-style cast.
14 * - @e T_functor Type of the functor to wrap.
18 template <class T_return, class T_functor>
19 struct retype_return_functor : public adapts<T_functor>
21 template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void>
22 struct deduce_result_type
23 { typedef T_return type; };
24 typedef T_return result_type;
26 T_return operator()();
28 template <class T_arg1>
29 inline T_return operator()(T_arg1 _A_a1)
30 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
34 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
35 template <class T_arg1>
36 inline T_return sun_forte_workaround(T_arg1 _A_a1)
37 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
42 template <class T_arg1,class T_arg2>
43 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2)
44 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
48 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
49 template <class T_arg1,class T_arg2>
50 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2)
51 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
56 template <class T_arg1,class T_arg2,class T_arg3>
57 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
58 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
62 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
63 template <class T_arg1,class T_arg2,class T_arg3>
64 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
65 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
70 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
71 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
72 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
73 (_A_a1,_A_a2,_A_a3,_A_a4));
76 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
77 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
78 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
79 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
80 (_A_a1,_A_a2,_A_a3,_A_a4));
84 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
85 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
86 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
87 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5));
90 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
91 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
92 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
93 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
94 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5));
98 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
99 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
100 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
101 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6));
104 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
105 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
106 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
107 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
108 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6));
112 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
113 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
114 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
115 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7));
118 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
119 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
120 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
121 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
122 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7));
126 retype_return_functor() {}
128 /** Constructs a retype_return_functor object that perform a C-style cast on the return value of the passed functor.
129 * @param _A_functor Functor to invoke from operator()().
131 explicit retype_return_functor(typename type_trait<T_functor>::take _A_functor)
132 : adapts<T_functor>(_A_functor)
136 template <class T_return, class T_functor>
137 T_return retype_return_functor<T_return, T_functor>::operator()()
138 { return T_return(this->functor_()); }
141 /** Adaptor that perform a C-style cast on the return value of a functor.
142 * This template specialization is for a void return. It drops the return value of the functor it invokes.
143 * Use the convenience function sigc::hide_return() to create an instance of sigc::retype_return_functor<void>.
147 /* The void specialization needed because of explicit cast to T_return.
149 template <class T_functor>
150 struct retype_return_functor<void, T_functor> : public adapts<T_functor>
152 template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void>
153 struct deduce_result_type
154 { typedef void type; };
155 typedef void result_type;
159 template <class T_arg1>
160 inline void operator()(T_arg1 _A_a1)
161 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
165 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
166 template <class T_arg1>
167 inline void sun_forte_workaround(T_arg1 _A_a1)
168 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
173 template <class T_arg1,class T_arg2>
174 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2)
175 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
179 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
180 template <class T_arg1,class T_arg2>
181 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2)
182 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
187 template <class T_arg1,class T_arg2,class T_arg3>
188 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
189 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
193 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
194 template <class T_arg1,class T_arg2,class T_arg3>
195 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
196 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
201 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
202 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
203 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
204 (_A_a1,_A_a2,_A_a3,_A_a4);
207 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
208 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
209 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
210 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
211 (_A_a1,_A_a2,_A_a3,_A_a4);
215 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
216 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
217 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
218 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5);
221 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
222 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
223 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
224 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
225 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5);
229 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
230 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
231 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
232 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6);
235 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
236 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
237 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
238 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
239 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6);
243 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
244 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
245 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
246 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7);
249 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
250 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
251 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
252 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
253 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7);
257 retype_return_functor() {}
258 retype_return_functor(typename type_trait<T_functor>::take _A_functor)
259 : adapts<T_functor>(_A_functor)
263 template <class T_functor>
264 void retype_return_functor<void, T_functor>::operator()()
265 { this->functor_(); }
268 //template specialization of visit_each<>(action, functor):
269 /** Performs a functor on each of the targets of a functor.
270 * The function overload for sigc::retype_return_functor performs a functor on the
271 * functor stored in the sigc::retype_return_functor object.
275 template <class T_action, class T_return, class T_functor>
276 void visit_each(const T_action& _A_action,
277 const retype_return_functor<T_return, T_functor>& _A_target)
279 visit_each(_A_action, _A_target.functor_);
283 /** Creates an adaptor of type sigc::retype_return_functor which performs a C-style cast on the return value of the passed functor.
284 * The template argument @e T_return specifies the target type of the cast.
286 * @param _A_functor Functor that should be wrapped.
287 * @return Adaptor that executes @e _A_functor performing a C-style casts on the return value.
291 template <class T_return, class T_functor>
292 inline retype_return_functor<T_return, T_functor>
293 retype_return(const T_functor& _A_functor)
294 { return retype_return_functor<T_return, T_functor>(_A_functor); }
296 /** Creates an adaptor of type sigc::retype_return_functor which drops the return value of the passed functor.
298 * @param _A_functor Functor that should be wrapped.
299 * @return Adaptor that executes @e _A_functor dropping its return value.
303 template <class T_functor>
304 inline retype_return_functor<void, T_functor>
305 hide_return(const T_functor& _A_functor)
306 { return retype_return_functor<void, T_functor>(_A_functor); }
308 } /* namespace sigc */
309 #endif /* _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ */