Created
September 25, 2015 18:05
-
-
Save goldsborough/e135be4364e0fb65d149 to your computer and use it in GitHub Desktop.
A tiny namespace for a more intuitive interface to printing to stdout in C++.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace print | |
{ | |
std::string final = "\n"; | |
std::string delimiter = ", "; | |
void booleans() | |
{ | |
std::cout << std::boolalpha; | |
} | |
void flag(const std::ios_base::fmtflags format_flag) | |
{ | |
std::cout.setf(format_flag); | |
} | |
void out() | |
{ | |
std::cout << final; | |
} | |
template<typename Head> | |
void out(Head&& head) | |
{ | |
std::cout << std::forward<Head>(head) << final; | |
} | |
template<typename Head, typename... Tail> | |
void out(Head&& head, Tail&&... tail) | |
{ | |
std::cout << std::forward<Head>(head) << delimiter; | |
out(std::forward<Tail>(tail)...); | |
} | |
template<typename Itr> | |
void all(Itr begin, Itr end) | |
{ | |
while(begin != end) | |
{ | |
std::cout << *begin; | |
if (++begin != end) std::cout << delimiter; | |
} | |
std::cout << final; | |
} | |
template<class Container> | |
void all(const Container& container) | |
{ | |
auto itr = container.begin(), end = container.end(); | |
while (itr != end) | |
{ | |
std::cout << *itr; | |
if (++itr != end) std::cout << delimiter; | |
} | |
std::cout << final; | |
} | |
void ln() | |
{ | |
std::cout << std::endl; | |
} | |
template<typename Head> | |
void ln(Head&& head) | |
{ | |
std::cout << std::forward<Head>(head) << std::endl; | |
} | |
template<typename Head, typename... Tail> | |
void ln(Head&& head, Tail&&... tail) | |
{ | |
std::cout << std::forward<Head>(head) << delimiter; | |
ln(std::forward<Tail>(tail)...); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment