C++ 在预处理器宏中附加到ostream
我会模仿流行的C++ 在预处理器宏中附加到ostream,c++,logging,boost,c-preprocessor,C++,Logging,Boost,C Preprocessor,我会模仿流行的BOOST\u LOG\u trial,使用一个自定义定义,它使用std::cout // Building with // g++ -std=c++14 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c log.cpp // g++ log.o -lpthread -lboost_log -lboost_log_setup -lboost_system -lboost_thread -o bl #define FORBID_BOOS
BOOST\u LOG\u trial
,使用一个自定义定义,它使用std::cout
// Building with
// g++ -std=c++14 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c log.cpp
// g++ log.o -lpthread -lboost_log -lboost_log_setup -lboost_system -lboost_thread -o bl
#define FORBID_BOOST_LOG
#define VALUE_TO_STRING(x) #x
#ifdef FORBID_BOOST_LOG
#include <iostream>
#define LOG(sev) std::cout << "[" << VALUE_TO_STRING(sev) << "] "
#else
#include <boost/log/trivial.hpp>
#define LOG(sev) BOOST_LOG_TRIVIAL(sev)
#endif
int main()
{
LOG(info) << "hello logging";
}
//使用
//g++-std=c++14-Wall-pedantic-g-O0-DBOOST\u LOG\u DYN\u LINK-c LOG.cpp
//g++log.o-lpthread-lboost\u log-lboost\u log\u设置-lboost\u系统-lboost\u线程-o bl
#定义禁止日志
#定义值_到_字符串(x)#x
#ifdef禁止\u增压\u日志
#包括
#definelog(sev)std::cout一种解决方案是创建一个日志对象,在销毁时打印换行符。对象将在日志表达式的末尾被销毁,因此您将在日志消息的末尾得到一行新行(这可能也是boost日志的工作方式):
#包括
结构日志
{
日志(常量字符*sev)
{
标准::cout
#include <iostream>
struct Log
{
Log(const char* sev)
{
std::cout << "[" << VALUE_TO_STRING(sev) << "] ";
}
~Log()
{
std::cout << "\n";
}
template < typename T >
Log& operator <<(const T& value)
{
std::cout << value;
return *this;
}
};
#define LOG(sev) Log(VALUE_TO_STRING(sev))