8template<
typename... Types>
11template<
template<
typename,
typename...>
class ContainerType,
typename... ElementTypes>
15 using tuple_t = std::tuple<ElementTypes...>;
17 using base_type = ContainerType< std::tuple<ElementTypes...> >;
19 using base_type::base_type;
25 os <<
"{ }";
return os;
29 auto last_element = ct.cend();
30 std::advance(last_element, -1);
32 for(
auto itr=ct.cbegin(); itr != last_element; std::advance(itr, 1))
42template<
typename... ElementTypes>
45template<
typename... ElementTypes>
48template<
typename... ElementTypes>
51template<
typename... ElementTypes>
57 using tuple_t =
typename vctr_tuples_t::tuple_t;
61 vt.emplace_back(tuple_t{10, 30.0f,
"Thomas Kim"});
62 vt.emplace_back(tuple_t{40, 50.0f,
"Sophie Turner"});
63 vt.emplace_back(tuple_t{20, 60.0f,
"Steven King"});
65 stream <<
"vt (vector of tuples ) = " << vt <<
endl;
71 using tuple_t =
typename set_tuples_t::tuple_t;
75 st.insert(tuple_t{10, 30.0f,
"Thomas Kim"});
76 st.insert(tuple_t{40, 50.0f,
"Sophie Turner"});
77 st.insert(tuple_t{20, 60.0f,
"Steven King"});
79 stream <<
"st (set of tuples ) = " << st <<
endl;
92 using tuple_t =
typename list_tuples_t::tuple_t;
96 lt.emplace_back(tuple_t{10, 30.0f,
"Thomas Kim"});
97 lt.emplace_back(tuple_t{40, 50.0f,
"Sophie Turner"});
98 lt.emplace_back(tuple_t{20, 60.0f,
"Steven King"});
100 stream <<
"lt (list of tuples ) = " << lt <<
endl;
void test_set_of_tuples()
void test_list_of_tuples()
void test_container_of_tuples()
std::tuple< ElementTypes... > tuple_t
ContainerType< std::tuple< ElementTypes... > > base_type
friend tpf::sstream & operator<<(tpf::sstream &os, const container_of_tuples_t &ct)
Type to string name conversions are defined.
decltype(auto) reverse(ContainerType &&container)
This type is used to manipulate type list.
Stream output operators << are implemented.