OSDN Git Service

nest_type.hpp: _NextType next はこの実装でもいけるか・・・?(本当・・・?
authorMyun2 <myun2@nwhite.info>
Sun, 26 Jun 2011 07:44:11 +0000 (16:44 +0900)
committerMyun2 <myun2@nwhite.info>
Sun, 26 Jun 2011 07:44:11 +0000 (16:44 +0900)
roast/include/roast/tp/nest_type.hpp
roast/test/roast_test_3rd/tuple_test3.cpp

index 5d12df6..778a14d 100644 (file)
@@ -13,6 +13,11 @@ namespace roast
        {
                namespace _nest_type
                {
+                       template <typename _NextType>
+                       class _next_type_impl { public: _NextType next; };
+                       template <>
+                       class _next_type_impl<EmptyType> {};
+
                        //      _NNextType Implement is outer class.
                        //      (because compile error when _NextType is EmptyType...)
 
@@ -30,7 +35,7 @@ namespace roast
        /////////////////////////////////////////////////////////////////////////////////////////////
 
        template <typename _ThisType, typename _NextType=EmptyType>
-       class nest_type
+       class nest_type : public tp::_nest_type::_next_type_impl<_NextType>
        {
        public:
                //      typedefs
@@ -51,7 +56,7 @@ namespace roast
 
                //      Values
                _ThisType value;
-               _NextType next;
+               //_NextType next;
                
        public:
                /// Constructors //////////////////////////////////////////////////////////////////
index 545df6c..e805bcb 100644 (file)
@@ -8,7 +8,8 @@ void main()
 {
        using namespace roast;
 
-       nest_type<int,nest_type<float> > a;
+       typedef nest_type<int,nest_type<int> > MyNestType;
+       MyNestType a;
        //a.value = 10;
        //a.next.value = 20.0f;
        //a.right<0>().value = 10;
@@ -22,7 +23,7 @@ void main()
        nest_type<int,nest_type<float> >::_NGetType<0>::type a1 = 10.0f;
        nest_type<int,nest_type<float> >::_NGetType<1>::type a2 = a1;
        
-       printf("%d, %f, %f\n", a.value, a.next.value, b.value );
+       printf("(%d) %d, %f, %f\n", sizeof(MyNestType), a.value, a.next.value, b.value );
        /*
        int add_result, sub_result, mul_result, div_result;