31 #ifndef ETL_VISITOR_INCLUDED
32 #define ETL_VISITOR_INCLUDED
53 #if ETL_CPP11_SUPPORTED && !defined(ETL_VISITOR_FORCE_CPP03)
59 template <
typename T1,
typename... Types>
60 class visitable :
public visitable<T1>,
public visitable<Types...>
64 using visitable<T1>::accept;
65 using visitable<Types...>::accept;
72 template <
typename T1>
77 virtual ~visitable() {}
79 virtual void accept(T1&) = 0;
89 template <
typename T1,
typename T2 =
void,
typename T3 =
void,
typename T4 =
void>
96 virtual void accept(T1&) = 0;
97 virtual void accept(T2&) = 0;
98 virtual void accept(T3&) = 0;
99 virtual void accept(T4&) = 0;
107 template <
typename T1,
typename T2,
typename T3>
114 virtual void accept(T1&) = 0;
115 virtual void accept(T2&) = 0;
116 virtual void accept(T3&) = 0;
124 template <
typename T1,
typename T2>
131 virtual void accept(T1&) = 0;
132 virtual void accept(T2&) = 0;
140 template <
typename T1>
147 virtual void accept(T1&) = 0;
152 #if ETL_CPP11_SUPPORTED && !defined(ETL_VISITOR_FORCE_CPP03)
158 template <
typename T1,
typename... Types>
164 using visitor<Types...>::visit;
171 template <
typename T1>
176 virtual ~visitor() {}
178 virtual void visit(T1&) = 0;
188 template <
typename T1,
typename T2 = void,
typename T3 = void,
typename T4 = void,
189 typename T5 = void,
typename T6 = void,
typename T7 = void,
typename T8 = void,
190 typename T9 = void,
typename T10 = void,
typename T11 = void,
typename T12 = void,
191 typename T13 = void,
typename T14 = void,
typename T15 = void,
typename T16 =
void>
198 virtual void visit(T1&) = 0;
199 virtual void visit(T2&) = 0;
200 virtual void visit(T3&) = 0;
201 virtual void visit(T4&) = 0;
202 virtual void visit(T5&) = 0;
203 virtual void visit(T6&) = 0;
204 virtual void visit(T7&) = 0;
205 virtual void visit(T8&) = 0;
206 virtual void visit(T9&) = 0;
207 virtual void visit(T10&) = 0;
208 virtual void visit(T11&) = 0;
209 virtual void visit(T12&) = 0;
210 virtual void visit(T13&) = 0;
211 virtual void visit(T14&) = 0;
212 virtual void visit(T15&) = 0;
213 virtual void visit(T16&) = 0;
221 template <
typename T1,
typename T2,
typename T3,
typename T4,
222 typename T5,
typename T6,
typename T7,
typename T8,
223 typename T9,
typename T10,
typename T11,
typename T12,
224 typename T13,
typename T14,
typename T15>
225 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
231 virtual void visit(T1&) = 0;
232 virtual void visit(T2&) = 0;
233 virtual void visit(T3&) = 0;
234 virtual void visit(T4&) = 0;
235 virtual void visit(T5&) = 0;
236 virtual void visit(T6&) = 0;
237 virtual void visit(T7&) = 0;
238 virtual void visit(T8&) = 0;
239 virtual void visit(T9&) = 0;
240 virtual void visit(T10&) = 0;
241 virtual void visit(T11&) = 0;
242 virtual void visit(T12&) = 0;
243 virtual void visit(T13&) = 0;
244 virtual void visit(T14&) = 0;
245 virtual void visit(T15&) = 0;
253 template <
typename T1,
typename T2,
typename T3,
typename T4,
254 typename T5,
typename T6,
typename T7,
typename T8,
255 typename T9,
typename T10,
typename T11,
typename T12,
256 typename T13,
typename T14>
257 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
263 virtual void visit(T1&) = 0;
264 virtual void visit(T2&) = 0;
265 virtual void visit(T3&) = 0;
266 virtual void visit(T4&) = 0;
267 virtual void visit(T5&) = 0;
268 virtual void visit(T6&) = 0;
269 virtual void visit(T7&) = 0;
270 virtual void visit(T8&) = 0;
271 virtual void visit(T9&) = 0;
272 virtual void visit(T10&) = 0;
273 virtual void visit(T11&) = 0;
274 virtual void visit(T12&) = 0;
275 virtual void visit(T13&) = 0;
276 virtual void visit(T14&) = 0;
284 template <
typename T1,
typename T2,
typename T3,
typename T4,
285 typename T5,
typename T6,
typename T7,
typename T8,
286 typename T9,
typename T10,
typename T11,
typename T12,
288 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
294 virtual void visit(T1&) = 0;
295 virtual void visit(T2&) = 0;
296 virtual void visit(T3&) = 0;
297 virtual void visit(T4&) = 0;
298 virtual void visit(T5&) = 0;
299 virtual void visit(T6&) = 0;
300 virtual void visit(T7&) = 0;
301 virtual void visit(T8&) = 0;
302 virtual void visit(T9&) = 0;
303 virtual void visit(T10&) = 0;
304 virtual void visit(T11&) = 0;
305 virtual void visit(T12&) = 0;
306 virtual void visit(T13&) = 0;
314 template <
typename T1,
typename T2,
typename T3,
typename T4,
315 typename T5,
typename T6,
typename T7,
typename T8,
316 typename T9,
typename T10,
typename T11,
typename T12>
317 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
323 virtual void visit(T1&) = 0;
324 virtual void visit(T2&) = 0;
325 virtual void visit(T3&) = 0;
326 virtual void visit(T4&) = 0;
327 virtual void visit(T5&) = 0;
328 virtual void visit(T6&) = 0;
329 virtual void visit(T7&) = 0;
330 virtual void visit(T8&) = 0;
331 virtual void visit(T9&) = 0;
332 virtual void visit(T10&) = 0;
333 virtual void visit(T11&) = 0;
334 virtual void visit(T12&) = 0;
342 template <
typename T1,
typename T2,
typename T3,
typename T4,
343 typename T5,
typename T6,
typename T7,
typename T8,
344 typename T9,
typename T10,
typename T11>
345 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
351 virtual void visit(T1&) = 0;
352 virtual void visit(T2&) = 0;
353 virtual void visit(T3&) = 0;
354 virtual void visit(T4&) = 0;
355 virtual void visit(T5&) = 0;
356 virtual void visit(T6&) = 0;
357 virtual void visit(T7&) = 0;
358 virtual void visit(T8&) = 0;
359 virtual void visit(T9&) = 0;
360 virtual void visit(T10&) = 0;
361 virtual void visit(T11&) = 0;
369 template <
typename T1,
typename T2,
typename T3,
typename T4,
370 typename T5,
typename T6,
typename T7,
typename T8,
371 typename T9,
typename T10>
372 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
378 virtual void visit(T1&) = 0;
379 virtual void visit(T2&) = 0;
380 virtual void visit(T3&) = 0;
381 virtual void visit(T4&) = 0;
382 virtual void visit(T5&) = 0;
383 virtual void visit(T6&) = 0;
384 virtual void visit(T7&) = 0;
385 virtual void visit(T8&) = 0;
386 virtual void visit(T9&) = 0;
387 virtual void visit(T10&) = 0;
395 template <
typename T1,
typename T2,
typename T3,
typename T4,
396 typename T5,
typename T6,
typename T7,
typename T8,
398 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9>
404 virtual void visit(T1&) = 0;
405 virtual void visit(T2&) = 0;
406 virtual void visit(T3&) = 0;
407 virtual void visit(T4&) = 0;
408 virtual void visit(T5&) = 0;
409 virtual void visit(T6&) = 0;
410 virtual void visit(T7&) = 0;
411 virtual void visit(T8&) = 0;
412 virtual void visit(T9&) = 0;
420 template <
typename T1,
typename T2,
typename T3,
typename T4,
421 typename T5,
typename T6,
typename T7,
typename T8>
428 virtual void visit(T1&) = 0;
429 virtual void visit(T2&) = 0;
430 virtual void visit(T3&) = 0;
431 virtual void visit(T4&) = 0;
432 virtual void visit(T5&) = 0;
433 virtual void visit(T6&) = 0;
434 virtual void visit(T7&) = 0;
435 virtual void visit(T8&) = 0;
443 template <
typename T1,
typename T2,
typename T3,
typename T4,
444 typename T5,
typename T6,
typename T7>
451 virtual void visit(T1&) = 0;
452 virtual void visit(T2&) = 0;
453 virtual void visit(T3&) = 0;
454 virtual void visit(T4&) = 0;
455 virtual void visit(T5&) = 0;
456 virtual void visit(T6&) = 0;
457 virtual void visit(T7&) = 0;
465 template <
typename T1,
typename T2,
typename T3,
typename T4,
466 typename T5,
typename T6>
473 virtual void visit(T1&) = 0;
474 virtual void visit(T2&) = 0;
475 virtual void visit(T3&) = 0;
476 virtual void visit(T4&) = 0;
477 virtual void visit(T5&) = 0;
478 virtual void visit(T6&) = 0;
486 template <
typename T1,
typename T2,
typename T3,
typename T4,
494 virtual void visit(T1&) = 0;
495 virtual void visit(T2&) = 0;
496 virtual void visit(T3&) = 0;
497 virtual void visit(T4&) = 0;
498 virtual void visit(T5&) = 0;
506 template <
typename T1,
typename T2,
typename T3,
typename T4>
513 virtual void visit(T1&) = 0;
514 virtual void visit(T2&) = 0;
515 virtual void visit(T3&) = 0;
516 virtual void visit(T4&) = 0;
524 template <
typename T1,
typename T2,
typename T3>
531 virtual void visit(T1&) = 0;
532 virtual void visit(T2&) = 0;
533 virtual void visit(T3&) = 0;
541 template <
typename T1,
typename T2>
548 virtual void visit(T1&) = 0;
549 virtual void visit(T2&) = 0;
557 template <
typename T1>
564 virtual void visit(T1&) = 0;
Definition: visitor.h:193
Definition: absolute.h:37