12 using money_t = double;
13 using title_t =
const char*;
16 using item_t = bag_t::variant_type;
20 my_bag.emplace_back(10);
21 my_bag.emplace_back(100.23);
22 my_bag.emplace_back(
"Modern C++ Programming");
23 my_bag.emplace_back(
"C++17 Standard");
25 stream <<
"Contents of my bag: " << my_bag <<
endl;
27 auto handle_coin = [](
const coin_t& coin_count)
29 stream <<
"There are " << coin_count <<
" coins."<<
nl;
32 auto handle_money = [](
const money_t& money)
34 stream <<
"I have " << money <<
" bucks." <<
nl;
37 auto handle_title = [](title_t& title)
39 stream <<
"I like reading \"" << title <<
"\"."<<
nl;
42 types::overloads handle_my_bag { handle_coin, handle_money, handle_title};
44 auto handle_items = [&handle_my_bag](
auto& item)
49 stream <<
"Items in my bag, item by item: "<<
endl;
51 for(
auto& item: my_bag)
62 using money_t = double;
63 using title_t =
const char*;
66 using item_t = bag_t::variant_type;
70 my_bag.emplace_back(10);
71 my_bag.emplace_back(100.23);
72 my_bag.emplace_back(
"Modern C++ Programming");
73 my_bag.emplace_back(
"C++17 Standard");
75 stream <<
"Contents of my bag: " << my_bag <<
endl;
77 types::overloads handle_my_bag
79 [](
const coin_t& coin_count)
81 stream <<
"There are " << coin_count <<
" coins."<<
nl;
84 [](
const money_t& money)
86 stream <<
"I have " << money <<
" bucks." <<
nl;
91 stream <<
"I like reading \"" << title <<
"\"."<<
nl;
96 stream <<
"Items in my bag, item by item: "<<
endl;
98 for(
auto& item: my_bag)
100 handle_my_bag.handle(item);
109 using money_t = double;
110 using title_t =
const char*;
113 using item_t = bag_t::variant_type;
117 my_bag.emplace_back(10);
118 my_bag.emplace_back(100.23);
119 my_bag.emplace_back(
"Modern C++ Programming");
120 my_bag.emplace_back(
"C++17 Standard");
122 types::overloads handle_my_bag
124 [](
const coin_t& coin_count)
126 stream <<
"There are " << coin_count <<
" coins."<<
nl;
129 [](
const money_t& money)
131 stream <<
"I have " << money <<
" bucks." <<
nl;
136 stream <<
"I like reading \"" << title <<
"\"."<<
nl;
141 stream <<
"Items in my bag, item by item, in in-order: "<<
endl;
143 handle_my_bag.for_each(my_bag);
147 stream <<
"Items in my bag, item by item, in reverse-order: "<<
endl;
149 handle_my_bag.for_each_reverse(my_bag);
157 using weight_t = double;
158 using name_t =
const char*;
161 using person_t = people_t::tuple_type;
165 friends.emplace_back(18, 56.5,
"Alice Kim");
166 friends.emplace_back(17, 70.6,
"Seven Park");
167 friends.emplace_back(16, 45.7,
"Michelle Lee");
172 for(
auto& f: friends)
179 stream <<
"\nEach properties of my individual friend: " <<
endl;
180 for(
auto& f: friends)
182 auto [age, weight, name] = f;
185 stream <<
"I am " << age <<
" years old."<<
endl;
void test_container_of_variants_simplified()
void test_container_of_variants()
void test_container_of_variants_further_simplified()
void test_container_of_tuples()
Type to string name conversions are defined.
hidden::vector_of_variants_t< ElementTypes... > vector_of_variants_t
enable_if_variant_t< VariantType > visit(VisitorType &&visitor, VariantType &&vt)
hidden::deque_of_tuples_t< ElementTypes... > deque_of_tuples_t
Stream output operators << are implemented.