如何为 cout 创建预处理器定义,该定义用预定义常量包围字符串
How to create a preprocessor define for cout that surrounds the string with predefined constants
我想定义一个宏"BracketCout",它会自动在流参数之前或之后插入预设的字符串值:
#define LEFT_BOUNDARY "["
#define RIGHT_BOUNDARY "]"
#define BracketCout ??????
BracketCout << "123" << "abc"; // outputs "[123abc]"
怎么能做到这一点呢?
就像这样。
#include <iostream>
#include <sstream>
class BracketOut
{
public:
BracketOut()
{
m_stream << '[';
}
~BracketOut()
{
std::cout << m_stream.str() << ']' << std::endl;
}
std::ostringstream& get() { return m_stream; }
std::ostringstream m_stream;
private:
};
int main()
{
BracketOut().get() << "Hello World";
}
由于我已经在使用日志类,因此实现 Code Clown 的建议相当简单。下面是记录器类的简化版本:
#define LOG Log().out()
class Log
{
public:
Log() {}
virtual ~Log();
std::ostringstream& out();
public:
std::ostringstream os;
};
std::ostringstream& Log::out()
{
os << "["; // beginning
return os;
}
Log::~Log() // destructor
{
os << "]";
std::cout << os.str() << std::endl;
}
要使用它,我会打电话
LOG << "abc" << 123; // prints "[abc123]"
相关文章:
- 如何摆脱为条件编译定义预处理器宏的需要?
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 导致编译错误的自定义预编译标头
- 在哪里定义了预定义'user-defined'文本"m"的标准库?
- 在宏中定义然后取消定义预处理器变量
- Tensorflow 如何定义预处理器宏?
- 在现代 CMake 中定义预处理器
- 如何打印预定义的cflags
- Visual Studio 2015-用GIT分支和GIT提交定义预处理变量
- 定义预处理器宏
- 适用于 64 位系统的预定义宏
- 如何在运行时取消定义和定义预处理器值
- C++定义预处理器
- 如何预定义<atomic>变量?
- 将文本文件中的特定单词:C++替换为预定义值
- Scons-使用带有Scons缓存的自定义预处理器
- 在不使用预定义的C++函数的情况下,按字母顺序打印存储在哈希表中每个索引处的名称
- 通过CMake定义预处理器宏
- 如何使用自定义预处理与Eigen
- 两个值的最大值,其中一个不能等于预定义值