#include <iostream>
enum class colors_v
{
red,
blue,
green,
white
};
class console_t final
{
public:
console_t() = default;
~console_t() = default;
template <typename T>
console_t& operator<<(const T& t)
{
std::cout << t;
return *this;
}
// argument can just as well be a manipulator class instance
// you get information from
console_t& operator<<(const colors_v& color)
{
switch (color)
{
case colors_v::red:
std::cout << "\033[1;31m";
break;
case colors_v::green:
std::cout << "\033[1;32m";
break;
case colors_v::blue:
std::cout << "\033[1;34m";
break;
case colors_v::white:
default:
std::cout << "\033[1;37m";
break;
}
return *this;
}
};
int main()
{
console_t console;
console << colors_v::red << "Hello " << colors_v::green << "world" << colors_v::blue << "!";
return 0;
}