我尝试使用没有硬编码的宏BOOST_LOG_NAMED_SCOPE
但没有成功(例如没有BOOST_LOG_NAMED_SCOPE("bla")
,但是BOOST_LOG_NAMED_SCOPE(some_variable)
;此宏在boost::log::string_literal
内部使用对于std::string
或char*
没有C&C。它唯一接受的是const char[]
(非const char*
) - 这对我没有帮助因为我无法对其进行硬编码 - 必须从函数中检索此值。
所以,我需要找到一种方法来构建boost::log::string_literal
std::string
或char*
,或以某种方式编辑const char[]
...(我还尝试创建一个char[]
并将其投放到const char[]
,但失败了)
答案 0 :(得分:0)
ERM。 “String literal”说明了一切。它只适用于文字,而 根据定义(在标准中,即{}} char const[]
。
此设计决策(在编译时使名称已知并已修复)可能有多种原因。从概念上讲,它会使日志记录“可预测”(如果范围名称不同,您将如何解释日志?),并且可能与性能有关(它甚至可以用于静态禁用基于范围名称的某些日志记录,但是输出格式化等其他内容可以看到改进的性能,具体取决于编译器。)
所以,您可以不对硬件进行硬编码,但是您不希望在执行此操作时使用需要字符串文字的宏。
现在,您可以使用相应类型的extern
个变量(extern char const some_scope_name[]
),这至少可以让您有机会在另一个翻译单元中定义值,I假设