Boost::log::string\u文本构造问题

Boost::log::string\u文本构造问题,boost,boost-log,boost-logging,Boost,Boost Log,Boost Logging,我尝试使用宏BOOST\u LOG\u NAMED\u SCOPE,但没有硬编码(例如,没有BOOST\u LOG\u NAMED\u SCOPE(“bla”),但是BOOST\u LOG\u NAMED\u SCOPE(一些变量);此宏在一个boost::log::string_literal中使用,它没有用于std::string或char*的命令。它只接受const char[](而不是const char*)-这对我没有任何帮助,因为我无法硬编码它-必须从函数中检索此值 因此,我需要找到

我尝试使用宏
BOOST\u LOG\u NAMED\u SCOPE
,但没有硬编码(例如,没有
BOOST\u LOG\u NAMED\u SCOPE(“bla”)
,但是
BOOST\u LOG\u NAMED\u SCOPE(一些变量)
;此宏在一个
boost::log::string_literal
中使用,它没有用于
std::string
char*
的命令。它只接受
const char[]
(而不是
const char*
)-这对我没有任何帮助,因为我无法硬编码它-必须从函数中检索此值

因此,我需要找到一种方法,用
std::string
char*
构造
boost::log::string\u literal
,或者以某种方式编辑
const char[]
。(我还试图创建一个
char[]
并将其强制转换为
const char[]
,但失败)

呃。“string literal”这说明了一切。它只适用于文本,而这些文本是根据定义(在标准中是)
char-const[]

这种设计决策(使名称在编译时为人所知并固定)可能有几个原因。从概念上讲,它将使日志记录“可预测”(如果范围名称不同,您将如何解释日志?),并且可能与性能有关(它甚至可以用于基于作用域名称静态禁用某些日志记录,但其他功能(如输出格式)可以根据编译器的不同而提高性能)

因此,您可以不希望硬编码,但不希望在这样做时使用需要字符串文字的宏


现在,您可以使用适当类型的
extern
变量(
extern char const some_scope\u name[]
),我想这至少会让您有机会在另一个转换单元中定义值。

Tnx。我之所以需要它,是为了只获得文件名的日志记录(而不是scope属性给出的完整路径)。我想我会使用特殊的格式化程序函数(使用boost::bind将其附加到接收器),或者我会为项目中的每个文件使用一个文件名宏(我将手动或通过脚本编写),并使用名为\u SCOPE的boost\u LOG\u