Go to the documentation of this file.00001
00010 #ifndef NUPLE_HH
00011 #define NUPLE_HH
00012
00013 #include"type_list/type_list.hh"
00014 #include"type_list/get_list.hh"
00015 #include<iostream>
00016
00017 namespace my_lib{
00018
00019 namespace internal{
00020 template<typename TList, unsigned N>
00021 struct HelpGet;
00022
00023 template<typename TpList, unsigned N>
00024 struct PrintNuple;
00025 }
00026
00027
00038 template<typename TList>
00039 struct Nuple : private Nuple <typename TList::tail> {
00040 private:
00042 typedef typename TList::head val_type;
00043 typedef typename TList::tail tail;
00044
00046 val_type val;
00047 public:
00048
00055 template<unsigned N>
00056 typename type_list::GetType<TList, N>::type& at();
00057
00064 template<unsigned N>
00065 const typename type_list::GetType<TList, N>::type& at() const;
00066
00074 Nuple<tail>& operator<<(const val_type& t);
00075
00076 template<typename TpList, unsigned N>
00077 friend struct internal::HelpGet;
00078
00079 template<typename TpList, unsigned N>
00080 friend struct internal::PrintNuple;
00081 };
00082
00084 template<>
00085 struct Nuple<type_list::NullType> {};
00086
00088 template<typename TList>
00089 std::ostream& operator<< (std::ostream& o, const Nuple<TList>& t);
00090
00091 }
00092
00093 #include"nuple.hxx"
00094
00095 #endif //NUPLE_HH