1 | #include <iostream>
|
---|
2 |
|
---|
3 | #include <map>
|
---|
4 | #include <string>
|
---|
5 |
|
---|
6 | #include <boost/foreach.hpp>
|
---|
7 | #include <boost/range/adaptor/map.hpp>
|
---|
8 |
|
---|
9 | using namespace std;
|
---|
10 | using namespace boost::adaptors;
|
---|
11 |
|
---|
12 | typedef map<string, string> my_map_t;
|
---|
13 |
|
---|
14 | my_map_t map_generator() {
|
---|
15 | cout << " Generating map" << endl;
|
---|
16 | my_map_t return_value;
|
---|
17 | return_value["igor!"] = "james";
|
---|
18 | return_value["12345"] = "ABCDE";
|
---|
19 | return_value["QWERT"] = "qwert";
|
---|
20 | return return_value;
|
---|
21 | }
|
---|
22 |
|
---|
23 | void using_temp_ref(const my_map_t &my_map)
|
---|
24 | {
|
---|
25 | BOOST_FOREACH(const string &key, my_map | map_keys) {
|
---|
26 | cout << "key = '" << key << "'" << endl;
|
---|
27 | }
|
---|
28 | }
|
---|
29 |
|
---|
30 | template <typename T>
|
---|
31 | void using_range_iterator(const boost::iterator_range<T> &keys_range)
|
---|
32 | {
|
---|
33 | BOOST_FOREACH(const string &key, keys_range) {
|
---|
34 | cout << "key = '" << key << "'" << endl;
|
---|
35 | }
|
---|
36 | }
|
---|
37 |
|
---|
38 |
|
---|
39 | int main(int argc, char** argv) {
|
---|
40 | cout << "Test #1 (local variable)" << endl;
|
---|
41 | my_map_t m = map_generator();
|
---|
42 | BOOST_FOREACH(const string &key, m | map_keys) {
|
---|
43 | cout << "key = '" << key << "'" << endl;
|
---|
44 | }
|
---|
45 |
|
---|
46 | cout << "Test #2 (value_type)" << endl;
|
---|
47 | BOOST_FOREACH(const my_map_t::value_type& p, map_generator()) {
|
---|
48 | cout << "key = '" << p.first << "'" << endl;
|
---|
49 | }
|
---|
50 |
|
---|
51 | cout << "Test #3 (temp ref)" << endl;
|
---|
52 | using_temp_ref(map_generator());
|
---|
53 |
|
---|
54 | cout << "Test #4 (range_iterator)" << endl;
|
---|
55 | using_range_iterator(map_generator() | map_keys);
|
---|
56 |
|
---|
57 | cout << "Test #5 (bug)" << endl;
|
---|
58 | BOOST_FOREACH(const string &key, map_generator() | map_keys) {
|
---|
59 | cout << "key = '" << key << "'" << endl;
|
---|
60 | }
|
---|
61 |
|
---|
62 | cout << "Test passed!" << endl;
|
---|
63 | }
|
---|