Boost :: log :: string_literal构造问题

时间:2014-06-02 16:53:41

标签: boost boost-log boost-logging

我尝试使用没有硬编码的宏BOOST_LOG_NAMED_SCOPE但没有成功(例如没有BOOST_LOG_NAMED_SCOPE("bla"),但是BOOST_LOG_NAMED_SCOPE(some_variable);此宏在boost::log::string_literal内部使用对于std::stringchar*没有C&C。它唯一接受的是const char[](非const char*) - 这对我没有帮助因为我无法对其进行硬编码 - 必须从函数中检索此值。

所以,我需要找到一种方法来构建boost::log::string_literal std::stringchar*,或以某种方式编辑const char[] ...(我还尝试创建一个char[]并将其投放到const char[],但失败了)

1 个答案:

答案 0 :(得分:0)

ERM。 “String literal”说明了一切。它只适用于文字,而 根据定义(在标准中,即{}} char const[]

此设计决策(在编译时使名称已知并已修复)可能有多种原因。从概念上讲,它会使日志记录“可预测”(如果范围名称不同,您将如何解释日志?),并且可能与性能有关(它甚至可以用于静态禁用基于范围名称的某些日志记录,但是输出格式化等其他内容可以看到改进的性能,具体取决于编译器。)

所以,您可以不对硬件进行硬编码,但是您不希望在执行此操作时使用需要字符串文字的宏。

现在,您可以使用相应类型的extern个变量(extern char const some_scope_name[]),这至少可以让您有机会在另一个翻译单元中定义值,I假设