forked from grantrostig/cpp_by_example
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmain.cpp
More file actions
31 lines (25 loc) · 1.28 KB
/
main.cpp
File metadata and controls
31 lines (25 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Inspired by Jon Kalb on 2017-03-26, with edits by Grant Rostig over his objections.
// https://wandbox.org/permlink/vzpsHxRoMISAoL4s
#include <algorithm>
#include <iostream>
#include <string>
#include <iterator>
#include "ostream_joiner_gr.hpp"
// Code below is version 0.3 of project: cpp_output_adapter
auto main() -> int {
std::ostream_iterator<char> sink_itr{std::cout};
std::string const source{"source"};
std::cout << "Original:";
std::copy(cbegin(source), cend(source), sink_itr); std::cout << '\n';
auto transformer{[](char c) {return static_cast<char>(std::toupper(c));}};
auto transform_output_adapter{Ostream_detail::make_transform_output_adapter(sink_itr, transformer)};
std::cout << "toupper():";
std::copy(begin(source), end(source), transform_output_adapter); std::cout << '\n';
auto infix_ostream_joiner{Ostream_detail::make_ostream_joiner(std::cout, ", ")};
std::cout << "infix:";
std::copy(cbegin(source), cend(source), infix_ostream_joiner); std::cout << '\n';
auto infix_and_transformed{Ostream_detail::make_transform_output_adapter(infix_ostream_joiner, transformer)};
std::cout << "infix transformed:";
std::copy(cbegin(source), cend(source), infix_and_transformed); std::cout << '\n';
std::cout << "###" << std::endl;
}