Более подходящим для С ++ способом для терминала с поддержкой ANSI можно написать собственные манипуляторы ANSI-потоков, такие как std :: endl, но для обработки escape-кода ANSI.
Код для этого может выглядеть следующим образомдля базовой необработанной реализации:
namespace ansi {
template < class CharT, class Traits >
constexpr
std::basic_ostream< CharT, Traits > & reset( std::basic_ostream< CharT, Traits > &os )
{
return os << "\033[0m";
}
template < class CharT, class Traits >
constexpr
std::basic_ostream< CharT, Traits > & foreground_black( std::basic_ostream< CharT, Traits > &os )
{
return os << "\033[30m";
}
template < class CharT, class Traits >
constexpr
std::basic_ostream< CharT, Traits > & foreground_red( std::basic_ostream< CharT, Traits > &os )
{
return os << "\033[31m";
}
...
} // ansi
И это можно использовать в коде, подобном этому:
std::cout << ansi::foreground_red << "in red" << ansi::reset << std::endl;