derivation_chain.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 * VCGLib                                                            o o     *
00003 * Visual and Computer Graphics Library                            o     o   *
00004 *                                                                _   O  _   *
00005 * Copyright(C) 2004                                                \/)\/    *
00006 * Visual Computing Lab                                            /\/|      *
00007 * ISTI - Italian National Research Council                           |      *
00008 *                                                                    \      *
00009 * All rights reserved.                                                      *
00010 *                                                                           *
00011 * This program is free software; you can redistribute it and/or modify      *   
00012 * it under the terms of the GNU General Public License as published by      *
00013 * the Free Software Foundation; either version 2 of the License, or         *
00014 * (at your option) any later version.                                       *
00015 *                                                                           *
00016 * This program is distributed in the hope that it will be useful,           *
00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
00019 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)          *
00020 * for more details.                                                         *
00021 *                                                                           *
00022 ****************************************************************************/
00023 
00024 #ifndef __VCG_DERIVATION_CHAIN
00025 #define __VCG_DERIVATION_CHAIN
00026 
00027 namespace vcg{
00028 /*------------------------------------------------------------------*/ 
00029 
00030 // Metaprogramming Core
00031 template < typename T=int>
00032 class DefaultDeriver : public T {};
00033 
00034 template <
00035                                         class Base,
00036           template <typename> class A> 
00037                                         class Arity1: public A<Base > {
00038           };
00039 
00040 template <
00041                                         class Base,
00042           template <typename> class A, template <typename> class B> 
00043                                         class Arity2: public B<Arity1<Base, A> > {};
00044 
00045 template <
00046                                         class Base,
00047           template <typename> class A, template <typename> class B, 
00048           template <typename> class C > 
00049                                         class Arity3: public C<Arity2<Base, A, B> > {};
00050 
00051 template <
00052                                         class Base,
00053           template <typename> class A, template <typename> class B, 
00054           template <typename> class C, template <typename> class D> 
00055                                         class Arity4: public D<Arity3<Base, A, B, C> > {};
00056 
00057 template <
00058                                         class Base,
00059           template <typename> class A, template <typename> class B, 
00060           template <typename> class C, template <typename> class D,
00061           template <typename> class E > 
00062                                         class Arity5: public E<Arity4<Base, A, B, C, D> > {};
00063 
00064 template <
00065                                         class Base,
00066           template <typename> class A, template <typename> class B, 
00067           template <typename> class C, template <typename> class D,
00068           template <typename> class E, template <typename> class F > 
00069                                         class Arity6: public F<Arity5<Base, A, B, C, D, E> > {};
00070 
00071 template <
00072                                         class Base,
00073           template <typename> class A, template <typename> class B, 
00074           template <typename> class C, template <typename> class D,
00075           template <typename> class E, template <typename> class F,
00076                                         template <typename> class G> 
00077                                         class Arity7: public G<Arity6<Base, A, B, C, D, E, F> > {};
00078 
00079 template <
00080                                         class Base,
00081           template <typename> class A, template <typename> class B, 
00082           template <typename> class C, template <typename> class D,
00083           template <typename> class E, template <typename> class F,
00084                                         template <typename> class G, template <typename> class H> 
00085                                         class Arity8: public H<Arity7<Base, A, B, C, D, E, F, G > > {};
00086 
00087 template <
00088                                         class Base,
00089           template <typename> class A, template <typename> class B, 
00090           template <typename> class C, template <typename> class D,
00091           template <typename> class E, template <typename> class F,
00092                                         template <typename> class G, template <typename> class H,
00093                                         template <typename> class I>
00094                                         class Arity9: public I<Arity8<Base, A, B, C, D, E, F, G, H > > {};
00095                                         
00096 template <
00097                                         class Base,
00098           template <typename> class A, template <typename> class B, 
00099           template <typename> class C, template <typename> class D,
00100           template <typename> class E, template <typename> class F,
00101                                         template <typename> class G, template <typename> class H,
00102                                         template <typename> class I, template <typename> class J>
00103                                         class Arity10: public J<Arity9<Base, A, B, C, D, E, F, G, H, I > > {};
00104 
00105 template <
00106                                         class Base,
00107           template <typename> class A, template <typename> class B, 
00108           template <typename> class C, template <typename> class D,
00109           template <typename> class E, template <typename> class F,
00110           template <typename> class G, template <typename> class H,
00111           template <typename> class I, template <typename> class J,
00112           template <typename> class K>
00113                                         class Arity11: public K<Arity10<Base, A, B, C, D, E, F, G, H, I, J> > {};
00114 
00115 
00116 template <
00117                                         class Base,
00118           template <typename> class A, template <typename> class B, 
00119           template <typename> class C, template <typename> class D,
00120           template <typename> class E, template <typename> class F,
00121           template <typename> class G, template <typename> class H,
00122           template <typename> class I, template <typename> class J,
00123           template <typename> class K, template <typename> class L>
00124                                         class Arity12: public L<Arity11<Base, A, B, C, D, E, F, G, H, I, J, K> > {};
00125 
00126 
00127 // chain with 2 template arguments on the derivers
00128 template <
00129                                         class Base,
00130                                         class TA,
00131                                         template <typename,typename> class A >
00132                                         class MArity1: public A<  Base, TA  > {
00133                                         };
00134 
00135 template <
00136                                         class Base,
00137                                         class TA,
00138                                         template <typename,typename> class A,
00139                                         class TB,
00140                                         template <typename,typename> class B>
00141                                         class MArity2: public B< MArity1<Base, TA, A>,TB > {};
00142 
00143 template <
00144                                         class Base,
00145                                         class TA,
00146                                         template <typename,typename> class A,
00147                                         class TB,
00148                                         template <typename,typename> class B,
00149                                         class TC,
00150                                         template <typename,typename> class C >
00151                                         class MArity3: public C<MArity2<Base, TA,A,TB, B>,TC > {};
00152 
00153 template <
00154                                         class Base,
00155                                         class TA,
00156                                         template <typename,typename> class A,
00157                                         class TB,
00158                                         template <typename,typename> class B,
00159                                         class TC,
00160                                         template <typename,typename> class C,
00161                                         class TD,
00162                                         template <typename,typename> class D>
00163                                         class MArity4: public D<MArity3<Base, TA,A,TB, B, TC,C>,TD > {};
00164 
00165 
00166 
00167 class DumClass {};
00168 
00169 }// end namespace vcg
00170 #endif


shape_reconstruction
Author(s): Roberto Martín-Martín
autogenerated on Sat Jun 8 2019 18:30:29