【问题标题】:boost::log 1.66.0. Argument for set_filter from boost's tutorial is wrong提升::日志 1.66.0。 boost 教程中 set_filter 的参数是错误的
【发布时间】:2017-12-27 14:44:12
【问题描述】:

我将学习使用 Boost 1.66.0 和 VS 2017 的 boost::log 库教程。 从一开始就解决问题:

void init()  
{ 
  logging::core::get()->set_filter
  (
    logging::trivial::severity >= logging::trivial::info
  );
}

错误: 没有运算符 ">=" 匹配这些操作数 ... 它看起来很合法 - 第一个操作数是一个没有定义任何比较运算符的结构(包括公共基类。我错过了一些免费功能吗?)。第二个操作数是枚举。
我的问题是它以前是如何工作的?

【问题讨论】:

  • 也许应该单独包含定义operator>= 的标头?
  • 我怀疑这将是 Boost 日志记录的许多问题中的第一个。它不是一个很棒的库——它过于复杂,对用户不是很友好。我建议要么寻找不同的日志库,要么自己编写。最终你会做其中之一......

标签: logging boost boost-log


【解决方案1】:

示例代码没有错,您可以测试它是否可以编译运行,完整代码见libs/log/example/doc/tutorial_trivial_flt.cpp

过滤器表达式中的第一个参数是一个关键字,也是一个 Boost.Phoenix 终端。它使过滤器表达式构建一个 Boost.Phoenix 函数对象,而不是立即评估比较。因此,比较运算符取自 Boost.Phoenix(boost/phoenix/operator/comparison.hpp,通过boost/phoenix/operator.hpp 包含在boost/log/expressions.hpp 中)。

【讨论】:

  • 安德烈,你的图书馆不错。会发生什么是 VS 2017 编辑器显示问题,但代码编译和链接就好了。谢谢。
  • 代码编辑器可能很难解析 Boost.Phoenix 和 Boost.Proto 中涉及的宏和模板,而 Boost.Phoenix 正是基于这些宏和模板构建的。不幸的是,我对此无能为力。一些 IDE 更聪明(通常是那些使用 Clang/LLVM 来维护内部代码模型的 IDE,例如 QtCreator)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2017-12-23
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多