fork download
  1. #include <stdio.h>
  2.  
  3. #define tempClassDef( num ) template<class T##num> struct tempClass##num { T##num m##num; }; \
  4.   template<> struct tempClass##num<void> { }
  5.  
  6. tempClassDef( 0 );
  7. tempClassDef( 1 );
  8. tempClassDef( 2 );
  9.  
  10. template<class T0, class T1=void, class T2=void>
  11. struct MyTupple : tempClass0<T0>, tempClass1<T1>, tempClass2<T2>
  12. {
  13. public:
  14. };
  15.  
  16. class A
  17. {
  18. public:
  19. int m_Value;
  20. A() : m_Value(0) { printf( "A\n" ); }
  21. ~A(){ printf( "~A\n" ); }
  22. };
  23.  
  24. class B
  25. {
  26. public:
  27. int m_Value;
  28. B() : m_Value(1) { printf( "B\n" ); }
  29. ~B(){ printf( "~B\n" ); }
  30. };
  31.  
  32. class C
  33. {
  34. public:
  35. int m_Value;
  36. C() : m_Value(2) { printf( "C\n" ); }
  37. ~C(){ printf( "~C\n" ); }
  38. };
  39.  
  40. int main( void )
  41. {
  42. {
  43. printf( "sizeof( MyTupple<A,B,C> ) = %d\n", sizeof(MyTupple<A,B,C>) );
  44. MyTupple<A,B,C> myTupple;
  45. printf( "%d, %d, %d\n", myTupple.m0.m_Value, myTupple.m1.m_Value, myTupple.m2.m_Value );
  46. }
  47. {
  48. printf( "sizeof( MyTupple<C> ) = %d\n", sizeof(MyTupple<C>) );
  49. MyTupple<C> myTupple;
  50. printf( "%d\n", myTupple.m0.m_Value );
  51. }
  52. return 0;
  53. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
sizeof( MyTupple<A,B,C> ) = 12
A
B
C
0, 1, 2
~C
~B
~A
sizeof( MyTupple<C> ) = 4
C
2
~C