cgv
method_pointer.h
1 #pragma once
2 
3 #include <cgv/type/invalid_type.h>
4 
5 namespace cgv {
6  namespace type {
7  namespace traits {
8 
12 template <typename M> struct method_pointer
13 {
14  static const bool is_method_pointer = false;
15  static const bool is_const_method_pointer = false;
16  typedef invalid_type this_type;
17  typedef invalid_type return_type;
18  static const unsigned int nr_arguments = 0;
19 };
20 
21 template <typename M, int> struct method_pointer_argument_list { typedef invalid_type type; };
22 
23 
25 template <typename X, typename R>
26 struct method_pointer<R (X::*)()>
27 {
28  static const bool is_method_pointer = true;
29  static const bool is_const_method_pointer = false;
30  typedef X this_type;
31  typedef R return_type;
32  static const unsigned int nr_arguments = 0;
33 };
34 
35 
37 template <typename X, typename R>
38 struct method_pointer<R (X::*)() const>
39 {
40  static const bool is_method_pointer = true;
41  static const bool is_const_method_pointer = true;
42  typedef X this_type;
43  typedef R return_type;
44  static const unsigned int nr_arguments = 0;
45 };
46 
47 
48 
50 template <typename X, typename R, typename T1>
51 struct method_pointer<R (X::*)(T1)>
52 {
53  static const bool is_method_pointer = true;
54  static const bool is_const_method_pointer = false;
55  typedef X this_type;
56  typedef R return_type;
57  static const unsigned int nr_arguments = 1;
58 };
59 
60 template <typename X, typename R, typename T1>
61 struct method_pointer_argument_list<R (X::*)(T1),0> { typedef T1 type; };
62 
63 
65 template <typename X, typename R, typename T1>
66 struct method_pointer<R (X::*)(T1) const>
67 {
68  static const bool is_method_pointer = true;
69  static const bool is_const_method_pointer = true;
70  typedef X this_type;
71  typedef R return_type;
72  static const unsigned int nr_arguments = 1;
73 };
74 
75 template <typename X, typename R, typename T1>
76 struct method_pointer_argument_list<R (X::*)(T1) const, 0> { typedef T1 type; };
77 
78 
79 
81 template <typename X, typename R, typename T1, typename T2>
82 struct method_pointer<R (X::*)(T1,T2)>
83 {
84  static const bool is_method_pointer = true;
85  static const bool is_const_method_pointer = false;
86  typedef X this_type;
87  typedef R return_type;
88  static const unsigned int nr_arguments = 2;
89 };
90 
91 template <typename X, typename R, typename T1, typename T2>
92 struct method_pointer_argument_list<R (X::*)(T1,T2),0> { typedef T1 type; };
93 
94 template <typename X, typename R, typename T1, typename T2>
95 struct method_pointer_argument_list<R (X::*)(T1,T2),1> { typedef T2 type; };
96 
97 
99 template <typename X, typename R, typename T1, typename T2>
100 struct method_pointer<R (X::*)(T1,T2) const>
101 {
102  static const bool is_method_pointer = true;
103  static const bool is_const_method_pointer = true;
104  typedef X this_type;
105  typedef R return_type;
106  static const unsigned int nr_arguments = 2;
107 };
108 
109 template <typename X, typename R, typename T1, typename T2>
110 struct method_pointer_argument_list<R (X::*)(T1,T2) const, 0> { typedef T1 type; };
111 
112 template <typename X, typename R, typename T1, typename T2>
113 struct method_pointer_argument_list<R (X::*)(T1,T2) const, 1> { typedef T2 type; };
114 
115 
116 
118 template <typename X, typename R, typename T1, typename T2, typename T3>
119 struct method_pointer<R (X::*)(T1,T2,T3)>
120 {
121  static const bool is_method_pointer = true;
122  static const bool is_const_method_pointer = false;
123  typedef X this_type;
124  typedef R return_type;
125  static const unsigned int nr_arguments = 3;
126 };
127 
128 template <typename X, typename R, typename T1, typename T2, typename T3>
129 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),0> { typedef T1 type; };
130 
131 template <typename X, typename R, typename T1, typename T2, typename T3>
132 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),1> { typedef T2 type; };
133 
134 template <typename X, typename R, typename T1, typename T2, typename T3>
135 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),2> { typedef T3 type; };
136 
137 
139 template <typename X, typename R, typename T1, typename T2, typename T3>
140 struct method_pointer<R (X::*)(T1,T2,T3) const>
141 {
142  static const bool is_method_pointer = true;
143  static const bool is_const_method_pointer = true;
144  typedef X this_type;
145  typedef R return_type;
146  static const unsigned int nr_arguments = 3;
147 };
148 
149 template <typename X, typename R, typename T1, typename T2, typename T3>
150 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 0> { typedef T1 type; };
151 
152 template <typename X, typename R, typename T1, typename T2, typename T3>
153 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 1> { typedef T2 type; };
154 
155 template <typename X, typename R, typename T1, typename T2, typename T3>
156 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 2> { typedef T3 type; };
157 
158 
159 
161 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
162 struct method_pointer<R (X::*)(T1,T2,T3,T4)>
163 {
164  static const bool is_method_pointer = true;
165  static const bool is_const_method_pointer = false;
166  typedef X this_type;
167  typedef R return_type;
168  static const unsigned int nr_arguments = 4;
169 };
170 
171 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
172 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),0> { typedef T1 type; };
173 
174 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
175 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),1> { typedef T2 type; };
176 
177 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
178 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),2> { typedef T3 type; };
179 
180 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
181 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),3> { typedef T4 type; };
182 
183 
185 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
186 struct method_pointer<R (X::*)(T1,T2,T3,T4) const>
187 {
188  static const bool is_method_pointer = true;
189  static const bool is_const_method_pointer = true;
190  typedef X this_type;
191  typedef R return_type;
192  static const unsigned int nr_arguments = 4;
193 };
194 
195 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
196 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 0> { typedef T1 type; };
197 
198 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
199 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 1> { typedef T2 type; };
200 
201 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
202 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 2> { typedef T3 type; };
203 
204 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4>
205 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 3> { typedef T4 type; };
206 
207 
208 
210 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
211 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5)>
212 {
213  static const bool is_method_pointer = true;
214  static const bool is_const_method_pointer = false;
215  typedef X this_type;
216  typedef R return_type;
217  static const unsigned int nr_arguments = 5;
218 };
219 
220 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
221 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),0> { typedef T1 type; };
222 
223 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
224 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),1> { typedef T2 type; };
225 
226 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
227 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),2> { typedef T3 type; };
228 
229 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
230 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),3> { typedef T4 type; };
231 
232 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
233 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),4> { typedef T5 type; };
234 
235 
237 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
238 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5) const>
239 {
240  static const bool is_method_pointer = true;
241  static const bool is_const_method_pointer = true;
242  typedef X this_type;
243  typedef R return_type;
244  static const unsigned int nr_arguments = 5;
245 };
246 
247 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
248 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 0> { typedef T1 type; };
249 
250 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
251 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 1> { typedef T2 type; };
252 
253 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
254 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 2> { typedef T3 type; };
255 
256 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
257 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 3> { typedef T4 type; };
258 
259 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
260 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 4> { typedef T5 type; };
261 
262 
263 
265 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
266 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6)>
267 {
268  static const bool is_method_pointer = true;
269  static const bool is_const_method_pointer = false;
270  typedef X this_type;
271  typedef R return_type;
272  static const unsigned int nr_arguments = 6;
273 };
274 
275 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
276 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),0> { typedef T1 type; };
277 
278 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
279 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),1> { typedef T2 type; };
280 
281 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
282 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),2> { typedef T3 type; };
283 
284 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
285 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),3> { typedef T4 type; };
286 
287 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
288 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),4> { typedef T5 type; };
289 
290 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
291 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),5> { typedef T6 type; };
292 
293 
295 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
296 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6) const>
297 {
298  static const bool is_method_pointer = true;
299  static const bool is_const_method_pointer = true;
300  typedef X this_type;
301  typedef R return_type;
302  static const unsigned int nr_arguments = 6;
303 };
304 
305 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
306 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 0> { typedef T1 type; };
307 
308 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
309 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 1> { typedef T2 type; };
310 
311 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
312 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 2> { typedef T3 type; };
313 
314 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
315 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 3> { typedef T4 type; };
316 
317 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
318 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 4> { typedef T5 type; };
319 
320 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
321 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 5> { typedef T6 type; };
322 
323 
324 
326 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
327 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6,T7)>
328 {
329  static const bool is_method_pointer = true;
330  static const bool is_const_method_pointer = false;
331  typedef X this_type;
332  typedef R return_type;
333  static const unsigned int nr_arguments = 7;
334 };
335 
336 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
337 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),0> { typedef T1 type; };
338 
339 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
340 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),1> { typedef T2 type; };
341 
342 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
343 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),2> { typedef T3 type; };
344 
345 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
346 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),3> { typedef T4 type; };
347 
348 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
349 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),4> { typedef T5 type; };
350 
351 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
352 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),5> { typedef T6 type; };
353 
354 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
355 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),6> { typedef T7 type; };
356 
357 
359 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
360 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const>
361 {
362  static const bool is_method_pointer = true;
363  static const bool is_const_method_pointer = true;
364  typedef X this_type;
365  typedef R return_type;
366  static const unsigned int nr_arguments = 7;
367 };
368 
369 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
370 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 0> { typedef T1 type; };
371 
372 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
373 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 1> { typedef T2 type; };
374 
375 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
376 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 2> { typedef T3 type; };
377 
378 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
379 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 3> { typedef T4 type; };
380 
381 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
382 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 4> { typedef T5 type; };
383 
384 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
385 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 5> { typedef T6 type; };
386 
387 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
388 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 6> { typedef T7 type; };
389 
390 
391 
393 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
394 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8)>
395 {
396  static const bool is_method_pointer = true;
397  static const bool is_const_method_pointer = false;
398  typedef X this_type;
399  typedef R return_type;
400  static const unsigned int nr_arguments = 8;
401 };
402 
403 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
404 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),0> { typedef T1 type; };
405 
406 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
407 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),1> { typedef T2 type; };
408 
409 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
410 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),2> { typedef T3 type; };
411 
412 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
413 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),3> { typedef T4 type; };
414 
415 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
416 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),4> { typedef T5 type; };
417 
418 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
419 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),5> { typedef T6 type; };
420 
421 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
422 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),6> { typedef T7 type; };
423 
424 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
425 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),7> { typedef T8 type; };
426 
427 
429 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
430 struct method_pointer<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const>
431 {
432  static const bool is_method_pointer = true;
433  static const bool is_const_method_pointer = true;
434  typedef X this_type;
435  typedef R return_type;
436  static const unsigned int nr_arguments = 8;
437 };
438 
439 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
440 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 0> { typedef T1 type; };
441 
442 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
443 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 1> { typedef T2 type; };
444 
445 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
446 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 2> { typedef T3 type; };
447 
448 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
449 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 3> { typedef T4 type; };
450 
451 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
452 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 4> { typedef T5 type; };
453 
454 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
455 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 5> { typedef T6 type; };
456 
457 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
458 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 6> { typedef T7 type; };
459 
460 template <typename X, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
461 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 7> { typedef T8 type; };
462 
463 
464 
465  }
466  }
467 }
cgv::type::traits::method_pointer
Definition: method_pointer.h:13
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::type::invalid_type
use this type to mark the result of an invalid meta function
Definition: invalid_type.h:7