Skip to content

Instantly share code, notes, and snippets.

@goldsborough
Created September 25, 2015 18:05
Show Gist options
  • Save goldsborough/e135be4364e0fb65d149 to your computer and use it in GitHub Desktop.
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++.
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