使用c++17
我有一个头文件colors.hpp
,可以帮助我在标准输出时实现彩色输出:
#pragma once
#include <string>
namespace Color
{
static const std::string yellow = "\u001b[33m";
static const std::string green = "\u001b[32m";
static const std::string red = "\u001b[31m";
static const std::string end = "\u001b[0m";
}
我经常这样使用它:
std::cout << Color::green << "some green text " << Color::end << std::endl;
我几乎总是在Color::end
后立即加上std::endl
。我希望能够实现相同的效果(换行符和缓冲区刷新),但只使用一个变量 - 类似于Color::endl
。
我只能想到string
类型的解决方案,但据我所知,它将包括\n
字符,但不会强制刷新到标准输出(stdout)。
static const std::string endl = std::ostringstream(static_cast<std::ostringstream &&>(std::ostringstream() << Color::end << std::endl)).str();
如果我在上面的代码中删除
.str()
,那么我将无法执行:std::cout << Color::endl;
,这是因为……error: invalid operands to binary expression ('basic_ostream<char>' and 'const std::__1::basic_ostringstream<char>')