C++ 无法在Boost.log中设置控制台日志的格式

C++ 无法在Boost.log中设置控制台日志的格式,c++,c++11,boost-log,C++,C++11,Boost Log,我正在尝试将boost.log设置到我的项目中。我遵循了这些示例,但当我尝试设置格式时,编译器会说该格式是只读引用 void init() { logging::add_console_log( std::cout, // Compiler says "const boost::parameter::keyword<keywords::tag::format>& is read-only reference". key

我正在尝试将boost.log设置到我的项目中。我遵循了这些示例,但当我尝试设置格式时,编译器会说该格式是只读引用

void init() {
    logging::add_console_log(
        std::cout,

        // Compiler says "const boost::parameter::keyword<keywords::tag::format>& is read-only reference".
        keywords::format = "%Timestamp% %Message%",

        keywords::severity = info
    );

    logging::add_common_attributes();
}
void init(){
日志记录::添加控制台日志(
std::cout,
//编译器说“const boost::parameter::keyword&是只读引用”。
关键词::format=“%Timestamp%%Message%”,
关键词::严重性=信息
);
日志记录::添加公共属性();
}

我猜您遇到了编译器错误。
格式
关键字与使用
BOOST\u参数\u关键字
from声明的任何其他关键字一样,确实是一个常量引用。但是,
boost::parameter::keyword
中有一个const限定赋值运算符,编译器应该选择它

作为一种解决方法,您可以尝试用调用
get
静态函数替换关键字,如下所示:

// Replace this:
keywords::format = "%Timestamp% %Message%"

// with this:
boost::parameter::keyword<keywords::tag::format>::get() = "%Timestamp% %Message%"
//替换此:
关键词::format=“%Timestamp%%消息%”
//为此:
boost::parameter::keyword::get()=“时间戳%%Message%”

另外,请注意属性名称区分大小写,并且
add\u common\u attributes
函数添加了一个“TimeStamp”属性,而不是“TimeStamp”(请注意大写字母S)。

在盲目尝试编写Boost代码之前,您应该了解语言本身。这样,总有一天,你会发现自己在1000行长的模板实例化错误面前,并且不知道该怎么做。你可以告诉我这是什么类型的错误。我不是软件开发的初学者(我是一名架构师),我非常理解其中的大部分原则。我需要学习C++来开发轻量级GLUSTEFS替换。只要告诉我这是什么样的错误,我就再也不会犯了,谢谢。我绝对不是Boost方面的专家,但我知道您正试图修改只读变量,正如编译器恰当地告诉您的那样。这基本上就是你问题的答案。另外:。这家伙和我做了同样的事情,但它似乎很有效。不,它甚至都没有编译。boost站点上的所有示例都将keywords::format放在该参数之前。感谢您的回答,但是编译器仍然抱怨实例的不变性。如果您只是在适当的位置构造关键字呢<代码>boost::参数::关键字格式;format=“%Timestamp%%Message%”然后,如果没有任何效果,您可以尝试手动构造接收器并通过API进行设置(请参阅),尽管在库的其他部分可能会出现类似错误。还有,你在用什么编译器?不。顺便说一句,它确实有效,但是CLion一直将该行标记为错误。但是代码编译并工作,没有gcc的警告(-Wall-Wextra-Werror)。我决定停止调查,让它保持原样,因为它可以工作(CLion标记了大量的boost代码)。大多数面向IDE的代码解析器必须走捷径以提供合理的性能。它们可能会将有效代码标记为错误或根本无法解析。根据我的经验,基于Clang的解析器(例如在QtCreator中)提供了最佳的健壮性,同时具有良好的性能。顺便说一句,下次如果您在问题中提到错误来自IDE而不是实际的编译器,那就太好了。