2 /* Do not edit! -- generated file */
3 #ifndef _SIGC_ADAPTORS_TRACK_OBJ_H_
4 #define _SIGC_ADAPTORS_TRACK_OBJ_H_
5 #include <sigc++/adaptors/adaptor_trait.h>
6 #include <sigc++/limit_reference.h>
10 /** @defgroup track_obj track_obj()
11 * sigc::track_obj() tracks trackable objects, referenced from a functor.
12 * It can be useful when you assign a C++11 lambda expression or a std::function<>
13 * to a slot, or connect it to a signal, and the lambda expression or std::function<>
14 * contains references to sigc::trackable derived objects.
16 * The functor returned by sigc::track_obj() is formally an adaptor, but it does
17 * not alter the signature, return type or behaviour of the supplied functor.
18 * Up to 7 objects can be tracked. operator()() can have up to 7 arguments.
22 * struct bar : public sigc::trackable {};
23 * sigc::signal<void> some_signal;
27 * some_signal.connect([&some_bar](){ foo(some_bar); });
28 * // NOT disconnected automatically when some_bar goes out of scope
29 * some_signal.connect(sigc::track_obj([&some_bar](){ foo(some_bar); }, some_bar);
30 * // disconnected automatically when some_bar goes out of scope
39 /** track_obj_functor1 wraps a functor and stores a reference to a trackable object.
40 * Use the convenience function track_obj() to create an instance of track_obj_functor1.
42 * @tparam T_functor The type of functor to wrap.
43 * @tparam T_obj1 The type of a trackable object.
49 template <typename T_functor, typename T_obj1>
50 class track_obj_functor1 : public adapts<T_functor>
53 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
55 #ifndef DOXYGEN_SHOULD_SKIP_THIS
56 template <typename T_arg1=void, typename T_arg2=void, typename T_arg3=void, typename T_arg4=void, typename T_arg5=void, typename T_arg6=void, typename T_arg7=void>
57 struct deduce_result_type
58 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<T_arg7>>::type type; };
60 typedef typename adaptor_type::result_type result_type;
62 /** Constructs a track_obj_functor1 object that wraps the passed functor and
63 * stores a reference to the passed trackable object.
64 * @param _A_func Functor.
65 * @param _A_obj1 Trackable object.
67 track_obj_functor1(const T_functor& _A_func, const T_obj1& _A_obj1)
68 : adapts<T_functor>(_A_func), obj1_(_A_obj1) {}
70 /** Invokes the wrapped functor.
71 * @return The return value of the functor invocation.
73 result_type operator()()
74 { return this->functor_(); }
76 /** Invokes the wrapped functor passing on the arguments.
77 * @param _A_arg1 Argument to be passed on to the functor.
78 * @return The return value of the functor invocation.
80 template <typename T_arg1>
81 typename deduce_result_type<T_arg1>::type
82 operator()(T_arg1 _A_arg1)
84 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
85 type_trait_pass_t<T_arg1>>
89 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
90 template <typename T_arg1>
91 typename deduce_result_type<T_arg1>::type
92 sun_forte_workaround(T_arg1 _A_arg1)
94 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
95 type_trait_pass_t<T_arg1>>
100 /** Invokes the wrapped functor passing on the arguments.
101 * @param _A_arg1 Argument to be passed on to the functor.
102 * @param _A_arg2 Argument to be passed on to the functor.
103 * @return The return value of the functor invocation.
105 template <typename T_arg1, typename T_arg2>
106 typename deduce_result_type<T_arg1, T_arg2>::type
107 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
109 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
110 type_trait_pass_t<T_arg1>,
111 type_trait_pass_t<T_arg2>>
115 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
116 template <typename T_arg1, typename T_arg2>
117 typename deduce_result_type<T_arg1, T_arg2>::type
118 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
120 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
121 type_trait_pass_t<T_arg1>,
122 type_trait_pass_t<T_arg2>>
127 /** Invokes the wrapped functor passing on the arguments.
128 * @param _A_arg1 Argument to be passed on to the functor.
129 * @param _A_arg2 Argument to be passed on to the functor.
130 * @param _A_arg3 Argument to be passed on to the functor.
131 * @return The return value of the functor invocation.
133 template <typename T_arg1, typename T_arg2, typename T_arg3>
134 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
135 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
137 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
138 type_trait_pass_t<T_arg1>,
139 type_trait_pass_t<T_arg2>,
140 type_trait_pass_t<T_arg3>>
141 (_A_arg1, _A_arg2, _A_arg3);
144 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
145 template <typename T_arg1, typename T_arg2, typename T_arg3>
146 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
147 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
149 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
150 type_trait_pass_t<T_arg1>,
151 type_trait_pass_t<T_arg2>,
152 type_trait_pass_t<T_arg3>>
153 (_A_arg1, _A_arg2, _A_arg3);
157 /** Invokes the wrapped functor passing on the arguments.
158 * @param _A_arg1 Argument to be passed on to the functor.
159 * @param _A_arg2 Argument to be passed on to the functor.
160 * @param _A_arg3 Argument to be passed on to the functor.
161 * @param _A_arg4 Argument to be passed on to the functor.
162 * @return The return value of the functor invocation.
164 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4>
165 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
166 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
168 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
169 type_trait_pass_t<T_arg1>,
170 type_trait_pass_t<T_arg2>,
171 type_trait_pass_t<T_arg3>,
172 type_trait_pass_t<T_arg4>>
173 (_A_arg1, _A_arg2, _A_arg3, _A_arg4);
176 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
177 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4>
178 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
179 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
181 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
182 type_trait_pass_t<T_arg1>,
183 type_trait_pass_t<T_arg2>,
184 type_trait_pass_t<T_arg3>,
185 type_trait_pass_t<T_arg4>>
186 (_A_arg1, _A_arg2, _A_arg3, _A_arg4);
190 /** Invokes the wrapped functor passing on the arguments.
191 * @param _A_arg1 Argument to be passed on to the functor.
192 * @param _A_arg2 Argument to be passed on to the functor.
193 * @param _A_arg3 Argument to be passed on to the functor.
194 * @param _A_arg4 Argument to be passed on to the functor.
195 * @param _A_arg5 Argument to be passed on to the functor.
196 * @return The return value of the functor invocation.
198 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5>
199 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
200 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
202 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
203 type_trait_pass_t<T_arg1>,
204 type_trait_pass_t<T_arg2>,
205 type_trait_pass_t<T_arg3>,
206 type_trait_pass_t<T_arg4>,
207 type_trait_pass_t<T_arg5>>
208 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5);
211 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
212 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5>
213 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
214 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
216 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
217 type_trait_pass_t<T_arg1>,
218 type_trait_pass_t<T_arg2>,
219 type_trait_pass_t<T_arg3>,
220 type_trait_pass_t<T_arg4>,
221 type_trait_pass_t<T_arg5>>
222 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5);
226 /** Invokes the wrapped functor passing on the arguments.
227 * @param _A_arg1 Argument to be passed on to the functor.
228 * @param _A_arg2 Argument to be passed on to the functor.
229 * @param _A_arg3 Argument to be passed on to the functor.
230 * @param _A_arg4 Argument to be passed on to the functor.
231 * @param _A_arg5 Argument to be passed on to the functor.
232 * @param _A_arg6 Argument to be passed on to the functor.
233 * @return The return value of the functor invocation.
235 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5, typename T_arg6>
236 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
237 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
239 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
240 type_trait_pass_t<T_arg1>,
241 type_trait_pass_t<T_arg2>,
242 type_trait_pass_t<T_arg3>,
243 type_trait_pass_t<T_arg4>,
244 type_trait_pass_t<T_arg5>,
245 type_trait_pass_t<T_arg6>>
246 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
249 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
250 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5, typename T_arg6>
251 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
252 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
254 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
255 type_trait_pass_t<T_arg1>,
256 type_trait_pass_t<T_arg2>,
257 type_trait_pass_t<T_arg3>,
258 type_trait_pass_t<T_arg4>,
259 type_trait_pass_t<T_arg5>,
260 type_trait_pass_t<T_arg6>>
261 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
265 /** Invokes the wrapped functor passing on the arguments.
266 * @param _A_arg1 Argument to be passed on to the functor.
267 * @param _A_arg2 Argument to be passed on to the functor.
268 * @param _A_arg3 Argument to be passed on to the functor.
269 * @param _A_arg4 Argument to be passed on to the functor.
270 * @param _A_arg5 Argument to be passed on to the functor.
271 * @param _A_arg6 Argument to be passed on to the functor.
272 * @param _A_arg7 Argument to be passed on to the functor.
273 * @return The return value of the functor invocation.
275 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5, typename T_arg6, typename T_arg7>
276 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type
277 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6, T_arg7 _A_arg7)
279 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
280 type_trait_pass_t<T_arg1>,
281 type_trait_pass_t<T_arg2>,
282 type_trait_pass_t<T_arg3>,
283 type_trait_pass_t<T_arg4>,
284 type_trait_pass_t<T_arg5>,
285 type_trait_pass_t<T_arg6>,
286 type_trait_pass_t<T_arg7>>
287 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, _A_arg7);
290 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
291 template <typename T_arg1, typename T_arg2, typename T_arg3, typename T_arg4, typename T_arg5, typename T_arg6, typename T_arg7>
292 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type
293 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6, T_arg7 _A_arg7)
295 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
296 type_trait_pass_t<T_arg1>,
297 type_trait_pass_t<T_arg2>,
298 type_trait_pass_t<T_arg3>,
299 type_trait_pass_t<T_arg4>,
300 type_trait_pass_t<T_arg5>,
301 type_trait_pass_t<T_arg6>,
302 type_trait_pass_t<T_arg7>>
303 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, _A_arg7);
308 #ifndef DOXYGEN_SHOULD_SKIP_THIS
310 // public, so that visit_each() can access it.
311 const_limit_reference<T_obj1> obj1_;
312 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
314 }; // end class track_obj_functor1
316 /** track_obj_functor2 wraps a functor and stores 2 references to trackable objects.
317 * Use the convenience function track_obj() to create an instance of track_obj_functor2.
319 * @tparam T_functor The type of functor to wrap.
320 * @tparam T_obj1 The type of a trackable object.
321 * @tparam T_obj2 The type of a trackable object.
327 template <typename T_functor, typename T_obj1, typename T_obj2>
328 class track_obj_functor2 : public track_obj_functor1<T_functor, T_obj1>
331 /** Constructs a track_obj_functor2 object that wraps the passed functor and
332 * stores references to the passed trackable objects.
333 * @param _A_func Functor.
334 * @param _A_obj1 Trackable object.
335 * @param _A_obj2 Trackable object.
337 track_obj_functor2(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2)
338 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2) {}
340 #ifndef DOXYGEN_SHOULD_SKIP_THIS
342 // public, so that visit_each() can access it.
343 const_limit_reference<T_obj2> obj2_;
344 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
346 }; // end class track_obj_functor2
348 /** track_obj_functor3 wraps a functor and stores 3 references to trackable objects.
349 * Use the convenience function track_obj() to create an instance of track_obj_functor3.
351 * @tparam T_functor The type of functor to wrap.
352 * @tparam T_obj1 The type of a trackable object.
353 * @tparam T_obj2 The type of a trackable object.
354 * @tparam T_obj3 The type of a trackable object.
360 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3>
361 class track_obj_functor3 : public track_obj_functor1<T_functor, T_obj1>
364 /** Constructs a track_obj_functor3 object that wraps the passed functor and
365 * stores references to the passed trackable objects.
366 * @param _A_func Functor.
367 * @param _A_obj1 Trackable object.
368 * @param _A_obj2 Trackable object.
369 * @param _A_obj3 Trackable object.
371 track_obj_functor3(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3)
372 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2), obj3_(_A_obj3) {}
374 #ifndef DOXYGEN_SHOULD_SKIP_THIS
376 // public, so that visit_each() can access it.
377 const_limit_reference<T_obj2> obj2_;
378 const_limit_reference<T_obj3> obj3_;
379 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
381 }; // end class track_obj_functor3
383 /** track_obj_functor4 wraps a functor and stores 4 references to trackable objects.
384 * Use the convenience function track_obj() to create an instance of track_obj_functor4.
386 * @tparam T_functor The type of functor to wrap.
387 * @tparam T_obj1 The type of a trackable object.
388 * @tparam T_obj2 The type of a trackable object.
389 * @tparam T_obj3 The type of a trackable object.
390 * @tparam T_obj4 The type of a trackable object.
396 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4>
397 class track_obj_functor4 : public track_obj_functor1<T_functor, T_obj1>
400 /** Constructs a track_obj_functor4 object that wraps the passed functor and
401 * stores references to the passed trackable objects.
402 * @param _A_func Functor.
403 * @param _A_obj1 Trackable object.
404 * @param _A_obj2 Trackable object.
405 * @param _A_obj3 Trackable object.
406 * @param _A_obj4 Trackable object.
408 track_obj_functor4(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4)
409 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2), obj3_(_A_obj3), obj4_(_A_obj4) {}
411 #ifndef DOXYGEN_SHOULD_SKIP_THIS
413 // public, so that visit_each() can access it.
414 const_limit_reference<T_obj2> obj2_;
415 const_limit_reference<T_obj3> obj3_;
416 const_limit_reference<T_obj4> obj4_;
417 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
419 }; // end class track_obj_functor4
421 /** track_obj_functor5 wraps a functor and stores 5 references to trackable objects.
422 * Use the convenience function track_obj() to create an instance of track_obj_functor5.
424 * @tparam T_functor The type of functor to wrap.
425 * @tparam T_obj1 The type of a trackable object.
426 * @tparam T_obj2 The type of a trackable object.
427 * @tparam T_obj3 The type of a trackable object.
428 * @tparam T_obj4 The type of a trackable object.
429 * @tparam T_obj5 The type of a trackable object.
435 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5>
436 class track_obj_functor5 : public track_obj_functor1<T_functor, T_obj1>
439 /** Constructs a track_obj_functor5 object that wraps the passed functor and
440 * stores references to the passed trackable objects.
441 * @param _A_func Functor.
442 * @param _A_obj1 Trackable object.
443 * @param _A_obj2 Trackable object.
444 * @param _A_obj3 Trackable object.
445 * @param _A_obj4 Trackable object.
446 * @param _A_obj5 Trackable object.
448 track_obj_functor5(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5)
449 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2), obj3_(_A_obj3), obj4_(_A_obj4), obj5_(_A_obj5) {}
451 #ifndef DOXYGEN_SHOULD_SKIP_THIS
453 // public, so that visit_each() can access it.
454 const_limit_reference<T_obj2> obj2_;
455 const_limit_reference<T_obj3> obj3_;
456 const_limit_reference<T_obj4> obj4_;
457 const_limit_reference<T_obj5> obj5_;
458 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
460 }; // end class track_obj_functor5
462 /** track_obj_functor6 wraps a functor and stores 6 references to trackable objects.
463 * Use the convenience function track_obj() to create an instance of track_obj_functor6.
465 * @tparam T_functor The type of functor to wrap.
466 * @tparam T_obj1 The type of a trackable object.
467 * @tparam T_obj2 The type of a trackable object.
468 * @tparam T_obj3 The type of a trackable object.
469 * @tparam T_obj4 The type of a trackable object.
470 * @tparam T_obj5 The type of a trackable object.
471 * @tparam T_obj6 The type of a trackable object.
477 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6>
478 class track_obj_functor6 : public track_obj_functor1<T_functor, T_obj1>
481 /** Constructs a track_obj_functor6 object that wraps the passed functor and
482 * stores references to the passed trackable objects.
483 * @param _A_func Functor.
484 * @param _A_obj1 Trackable object.
485 * @param _A_obj2 Trackable object.
486 * @param _A_obj3 Trackable object.
487 * @param _A_obj4 Trackable object.
488 * @param _A_obj5 Trackable object.
489 * @param _A_obj6 Trackable object.
491 track_obj_functor6(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5, const T_obj6& _A_obj6)
492 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2), obj3_(_A_obj3), obj4_(_A_obj4), obj5_(_A_obj5), obj6_(_A_obj6) {}
494 #ifndef DOXYGEN_SHOULD_SKIP_THIS
496 // public, so that visit_each() can access it.
497 const_limit_reference<T_obj2> obj2_;
498 const_limit_reference<T_obj3> obj3_;
499 const_limit_reference<T_obj4> obj4_;
500 const_limit_reference<T_obj5> obj5_;
501 const_limit_reference<T_obj6> obj6_;
502 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
504 }; // end class track_obj_functor6
506 /** track_obj_functor7 wraps a functor and stores 7 references to trackable objects.
507 * Use the convenience function track_obj() to create an instance of track_obj_functor7.
509 * @tparam T_functor The type of functor to wrap.
510 * @tparam T_obj1 The type of a trackable object.
511 * @tparam T_obj2 The type of a trackable object.
512 * @tparam T_obj3 The type of a trackable object.
513 * @tparam T_obj4 The type of a trackable object.
514 * @tparam T_obj5 The type of a trackable object.
515 * @tparam T_obj6 The type of a trackable object.
516 * @tparam T_obj7 The type of a trackable object.
522 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6, typename T_obj7>
523 class track_obj_functor7 : public track_obj_functor1<T_functor, T_obj1>
526 /** Constructs a track_obj_functor7 object that wraps the passed functor and
527 * stores references to the passed trackable objects.
528 * @param _A_func Functor.
529 * @param _A_obj1 Trackable object.
530 * @param _A_obj2 Trackable object.
531 * @param _A_obj3 Trackable object.
532 * @param _A_obj4 Trackable object.
533 * @param _A_obj5 Trackable object.
534 * @param _A_obj6 Trackable object.
535 * @param _A_obj7 Trackable object.
537 track_obj_functor7(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5, const T_obj6& _A_obj6, const T_obj7& _A_obj7)
538 : track_obj_functor1<T_functor, T_obj1>(_A_func, _A_obj1), obj2_(_A_obj2), obj3_(_A_obj3), obj4_(_A_obj4), obj5_(_A_obj5), obj6_(_A_obj6), obj7_(_A_obj7) {}
540 #ifndef DOXYGEN_SHOULD_SKIP_THIS
542 // public, so that visit_each() can access it.
543 const_limit_reference<T_obj2> obj2_;
544 const_limit_reference<T_obj3> obj3_;
545 const_limit_reference<T_obj4> obj4_;
546 const_limit_reference<T_obj5> obj5_;
547 const_limit_reference<T_obj6> obj6_;
548 const_limit_reference<T_obj7> obj7_;
549 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
551 }; // end class track_obj_functor7
554 #ifndef DOXYGEN_SHOULD_SKIP_THIS
555 //template specialization of visitor<>::do_visit_each<>(action, functor):
556 /** Performs a functor on each of the targets of a functor.
557 * The function overload for sigc::track_obj_functor1 performs a functor
558 * on the functor and on the trackable object instances stored in the
559 * sigc::track_obj_functor1 object.
565 template <typename T_functor, typename T_obj1>
566 struct visitor<track_obj_functor1<T_functor, T_obj1> >
568 template <typename T_action>
569 static void do_visit_each(const T_action& _A_action,
570 const track_obj_functor1<T_functor, T_obj1>& _A_target)
572 sigc::visit_each(_A_action, _A_target.functor_);
573 sigc::visit_each(_A_action, _A_target.obj1_);
577 //template specialization of visitor<>::do_visit_each<>(action, functor):
578 /** Performs a functor on each of the targets of a functor.
579 * The function overload for sigc::track_obj_functor2 performs a functor
580 * on the functor and on the trackable object instances stored in the
581 * sigc::track_obj_functor2 object.
587 template <typename T_functor, typename T_obj1, typename T_obj2>
588 struct visitor<track_obj_functor2<T_functor, T_obj1, T_obj2> >
590 template <typename T_action>
591 static void do_visit_each(const T_action& _A_action,
592 const track_obj_functor2<T_functor, T_obj1, T_obj2>& _A_target)
594 sigc::visit_each(_A_action, _A_target.functor_);
595 sigc::visit_each(_A_action, _A_target.obj1_);
596 sigc::visit_each(_A_action, _A_target.obj2_);
600 //template specialization of visitor<>::do_visit_each<>(action, functor):
601 /** Performs a functor on each of the targets of a functor.
602 * The function overload for sigc::track_obj_functor3 performs a functor
603 * on the functor and on the trackable object instances stored in the
604 * sigc::track_obj_functor3 object.
610 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3>
611 struct visitor<track_obj_functor3<T_functor, T_obj1, T_obj2, T_obj3> >
613 template <typename T_action>
614 static void do_visit_each(const T_action& _A_action,
615 const track_obj_functor3<T_functor, T_obj1, T_obj2, T_obj3>& _A_target)
617 sigc::visit_each(_A_action, _A_target.functor_);
618 sigc::visit_each(_A_action, _A_target.obj1_);
619 sigc::visit_each(_A_action, _A_target.obj2_);
620 sigc::visit_each(_A_action, _A_target.obj3_);
624 //template specialization of visitor<>::do_visit_each<>(action, functor):
625 /** Performs a functor on each of the targets of a functor.
626 * The function overload for sigc::track_obj_functor4 performs a functor
627 * on the functor and on the trackable object instances stored in the
628 * sigc::track_obj_functor4 object.
634 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4>
635 struct visitor<track_obj_functor4<T_functor, T_obj1, T_obj2, T_obj3, T_obj4> >
637 template <typename T_action>
638 static void do_visit_each(const T_action& _A_action,
639 const track_obj_functor4<T_functor, T_obj1, T_obj2, T_obj3, T_obj4>& _A_target)
641 sigc::visit_each(_A_action, _A_target.functor_);
642 sigc::visit_each(_A_action, _A_target.obj1_);
643 sigc::visit_each(_A_action, _A_target.obj2_);
644 sigc::visit_each(_A_action, _A_target.obj3_);
645 sigc::visit_each(_A_action, _A_target.obj4_);
649 //template specialization of visitor<>::do_visit_each<>(action, functor):
650 /** Performs a functor on each of the targets of a functor.
651 * The function overload for sigc::track_obj_functor5 performs a functor
652 * on the functor and on the trackable object instances stored in the
653 * sigc::track_obj_functor5 object.
659 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5>
660 struct visitor<track_obj_functor5<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5> >
662 template <typename T_action>
663 static void do_visit_each(const T_action& _A_action,
664 const track_obj_functor5<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5>& _A_target)
666 sigc::visit_each(_A_action, _A_target.functor_);
667 sigc::visit_each(_A_action, _A_target.obj1_);
668 sigc::visit_each(_A_action, _A_target.obj2_);
669 sigc::visit_each(_A_action, _A_target.obj3_);
670 sigc::visit_each(_A_action, _A_target.obj4_);
671 sigc::visit_each(_A_action, _A_target.obj5_);
675 //template specialization of visitor<>::do_visit_each<>(action, functor):
676 /** Performs a functor on each of the targets of a functor.
677 * The function overload for sigc::track_obj_functor6 performs a functor
678 * on the functor and on the trackable object instances stored in the
679 * sigc::track_obj_functor6 object.
685 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6>
686 struct visitor<track_obj_functor6<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6> >
688 template <typename T_action>
689 static void do_visit_each(const T_action& _A_action,
690 const track_obj_functor6<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6>& _A_target)
692 sigc::visit_each(_A_action, _A_target.functor_);
693 sigc::visit_each(_A_action, _A_target.obj1_);
694 sigc::visit_each(_A_action, _A_target.obj2_);
695 sigc::visit_each(_A_action, _A_target.obj3_);
696 sigc::visit_each(_A_action, _A_target.obj4_);
697 sigc::visit_each(_A_action, _A_target.obj5_);
698 sigc::visit_each(_A_action, _A_target.obj6_);
702 //template specialization of visitor<>::do_visit_each<>(action, functor):
703 /** Performs a functor on each of the targets of a functor.
704 * The function overload for sigc::track_obj_functor7 performs a functor
705 * on the functor and on the trackable object instances stored in the
706 * sigc::track_obj_functor7 object.
712 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6, typename T_obj7>
713 struct visitor<track_obj_functor7<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6, T_obj7> >
715 template <typename T_action>
716 static void do_visit_each(const T_action& _A_action,
717 const track_obj_functor7<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6, T_obj7>& _A_target)
719 sigc::visit_each(_A_action, _A_target.functor_);
720 sigc::visit_each(_A_action, _A_target.obj1_);
721 sigc::visit_each(_A_action, _A_target.obj2_);
722 sigc::visit_each(_A_action, _A_target.obj3_);
723 sigc::visit_each(_A_action, _A_target.obj4_);
724 sigc::visit_each(_A_action, _A_target.obj5_);
725 sigc::visit_each(_A_action, _A_target.obj6_);
726 sigc::visit_each(_A_action, _A_target.obj7_);
730 #endif // DOXYGEN_SHOULD_SKIP_THIS
732 /** Creates an adaptor of type sigc::track_obj_functor1 which wraps a functor.
733 * @param _A_func Functor that shall be wrapped.
734 * @param _A_obj1 Trackable object.
735 * @return Adaptor that executes _A_func() on invocation.
741 template <typename T_functor, typename T_obj1>
742 inline track_obj_functor1<T_functor, T_obj1>
743 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1)
745 return track_obj_functor1<T_functor, T_obj1>
749 /** Creates an adaptor of type sigc::track_obj_functor2 which wraps a functor.
750 * @param _A_func Functor that shall be wrapped.
751 * @param _A_obj1 Trackable object.
752 * @param _A_obj2 Trackable object.
753 * @return Adaptor that executes _A_func() on invocation.
759 template <typename T_functor, typename T_obj1, typename T_obj2>
760 inline track_obj_functor2<T_functor, T_obj1, T_obj2>
761 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2)
763 return track_obj_functor2<T_functor, T_obj1, T_obj2>
764 (_A_func, _A_obj1, _A_obj2);
767 /** Creates an adaptor of type sigc::track_obj_functor3 which wraps a functor.
768 * @param _A_func Functor that shall be wrapped.
769 * @param _A_obj1 Trackable object.
770 * @param _A_obj2 Trackable object.
771 * @param _A_obj3 Trackable object.
772 * @return Adaptor that executes _A_func() on invocation.
778 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3>
779 inline track_obj_functor3<T_functor, T_obj1, T_obj2, T_obj3>
780 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3)
782 return track_obj_functor3<T_functor, T_obj1, T_obj2, T_obj3>
783 (_A_func, _A_obj1, _A_obj2, _A_obj3);
786 /** Creates an adaptor of type sigc::track_obj_functor4 which wraps a functor.
787 * @param _A_func Functor that shall be wrapped.
788 * @param _A_obj1 Trackable object.
789 * @param _A_obj2 Trackable object.
790 * @param _A_obj3 Trackable object.
791 * @param _A_obj4 Trackable object.
792 * @return Adaptor that executes _A_func() on invocation.
798 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4>
799 inline track_obj_functor4<T_functor, T_obj1, T_obj2, T_obj3, T_obj4>
800 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4)
802 return track_obj_functor4<T_functor, T_obj1, T_obj2, T_obj3, T_obj4>
803 (_A_func, _A_obj1, _A_obj2, _A_obj3, _A_obj4);
806 /** Creates an adaptor of type sigc::track_obj_functor5 which wraps a functor.
807 * @param _A_func Functor that shall be wrapped.
808 * @param _A_obj1 Trackable object.
809 * @param _A_obj2 Trackable object.
810 * @param _A_obj3 Trackable object.
811 * @param _A_obj4 Trackable object.
812 * @param _A_obj5 Trackable object.
813 * @return Adaptor that executes _A_func() on invocation.
819 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5>
820 inline track_obj_functor5<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5>
821 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5)
823 return track_obj_functor5<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5>
824 (_A_func, _A_obj1, _A_obj2, _A_obj3, _A_obj4, _A_obj5);
827 /** Creates an adaptor of type sigc::track_obj_functor6 which wraps a functor.
828 * @param _A_func Functor that shall be wrapped.
829 * @param _A_obj1 Trackable object.
830 * @param _A_obj2 Trackable object.
831 * @param _A_obj3 Trackable object.
832 * @param _A_obj4 Trackable object.
833 * @param _A_obj5 Trackable object.
834 * @param _A_obj6 Trackable object.
835 * @return Adaptor that executes _A_func() on invocation.
841 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6>
842 inline track_obj_functor6<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6>
843 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5, const T_obj6& _A_obj6)
845 return track_obj_functor6<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6>
846 (_A_func, _A_obj1, _A_obj2, _A_obj3, _A_obj4, _A_obj5, _A_obj6);
849 /** Creates an adaptor of type sigc::track_obj_functor7 which wraps a functor.
850 * @param _A_func Functor that shall be wrapped.
851 * @param _A_obj1 Trackable object.
852 * @param _A_obj2 Trackable object.
853 * @param _A_obj3 Trackable object.
854 * @param _A_obj4 Trackable object.
855 * @param _A_obj5 Trackable object.
856 * @param _A_obj6 Trackable object.
857 * @param _A_obj7 Trackable object.
858 * @return Adaptor that executes _A_func() on invocation.
864 template <typename T_functor, typename T_obj1, typename T_obj2, typename T_obj3, typename T_obj4, typename T_obj5, typename T_obj6, typename T_obj7>
865 inline track_obj_functor7<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6, T_obj7>
866 track_obj(const T_functor& _A_func, const T_obj1& _A_obj1, const T_obj2& _A_obj2, const T_obj3& _A_obj3, const T_obj4& _A_obj4, const T_obj5& _A_obj5, const T_obj6& _A_obj6, const T_obj7& _A_obj7)
868 return track_obj_functor7<T_functor, T_obj1, T_obj2, T_obj3, T_obj4, T_obj5, T_obj6, T_obj7>
869 (_A_func, _A_obj1, _A_obj2, _A_obj3, _A_obj4, _A_obj5, _A_obj6, _A_obj7);
873 } /* namespace sigc */
874 #endif /* _SIGC_ADAPTORS_TRACK_OBJ_H_ */