是否可以隐藏像BOOST_LOG_TRIVIAL(lvl)这样的宏
Is it possible to hide a macro like BOOST_LOG_TRIVIAL(lvl)
我已经在一个项目中使用boost.log
一段时间了,这是一个非常棒的日志库。但是要使用像BOOST_LOG_TRIVIAL(lvl)
这样的基本日志,我需要包含boost/log/trivial.hpp
这将导致许多与提升相关的东西被确定范围。
有没有办法(比如使用包装器或别名(来"隐藏"boost/log/trivial.hpp
和BOOST_LOG_TRIVIAL(lvl)
这样我就可以确定任何其他开发人员只能调用包装的BOOST_LOG_TRIVIAL(lvl)
版本?
一开始我以为BOOST_LOG_TRIVIAL(lvl)
是一个简单的流对象,但后来我发现它将扩展为:
#define BOOST_LOG_STREAM_WITH_PARAMS_INTERNAL(logger, rec_var, params_seq)
for (::boost::log::record rec_var = (logger).open_record((BOOST_PP_SEQ_ENUM(params_seq))); !!rec_var;)
::boost::log::aux::make_record_pump((logger), rec_var).stream()
这里有一个for循环,我不知道如何包装它。
这是复制该宏正在执行的操作的一项重要任务。你也需要一个宏,但如果你想在实现单元中隐藏所有提升细节,那么你需要以某种方式复制方法调用。
首先,您需要一个围绕boost::log::record
的包装器,然后是一个围绕boost::log::record_pump<>
的包装器,最后是制作包装器实例的方法。最终结果应如下所示:
namespace foo {
enum severity {
debug, info, warn, error;
}
struct record {
// use pimpl to hide
};
struct record_pump {
// use pimpl to hide
};
// This will call the trivial logger to create a record and then
// wrap with your record
record make_record(severity lvl);
// This method will call the boost `boost::log::make_record_pump` method
// with the trivial logger and wrap the resulting `record_pump<T>` by your wrapper
record_pump make_record_pump(record& rec);
}
然后声明一个看起来像 boost 宏的宏 - 请记住,您需要在自己的枚举中公开关卡
#define LOG(lvl)
for (auto rec = foo::make_record(lvl); !!rec;)
foo::make_record_pump(rec).stream()
您需要实现 record
和 record_pump
接口的必要位。
相关文章:
- 如何用数字处理log(0)
- 安装opencv失败-粘贴CMakeError.log的内容
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- boost日志文件无法创建sample.log文件
- Boost::log只在debian中崩溃
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 设置自定义收集器时不会提升::log尊重关键字::max_size吗?
- 我仍然收到此错误未定义的引用:boost::log::v2_mt_posix::trivial::logger::get
- 增强.log含义和功能
- log in cpp 14 and 17
- constexpr exp, log, pow
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- V8 控制台.log不打印
- Boost Log:变量不是"boost::log::v2s_mt_posix::trivial"的
- Math.log是以一种避免log(1 x)的精度的方式实现的
- 如何打印通话函数的行号和文件名而不是log.cpp
- boost.log-如何用附加和旋转配置text_file_backend
- Boost::log misbehaves (ubuntu 16.04, boost 1.58)
- boost.log错误与命名空间