如何声明和定义Poco Logger?
How to declare and define Poco Logger?
我使用优秀的 Poco 框架进行日志记录。目前,我在头文件中这样定义 Logger 和 LogStream:
#Foo.h
....
class Foo
{
private:
Poco::Logger &logger = Poco::Logger::get("Foo");
Poco::LogStream logStream{ logger };
};
在我开始使用 boost::di 之前,它一直很好用。当我像这样使用 boost 注入器为 Foo 创建一个对象时,
injector.create<Foo>();
我收到一个编译器错误提示,
attempting to reference a deleted function
但是,如果我删除 LogStream 定义,则不会出现编译器错误。是否可以在header中声明LogStream而不定义它?我是 C++ 的新手,如果有人能指出我在这里做错了什么以及如何正确做,我会很高兴。非常感谢。
无法复制 Foo
的实例,原因有二:
1) logger
是引用,引用必须在创建Foo
时初始化,所以只有这样
要做到这一点是使用构造函数。
编译器无法生成复制赋值操作。所以 Foo f1,f2; f1 = f2;
无法工作。
2) LogStream
的基 class 是 std::ostream
,它禁用了复制操作。
解决方法:
删除 logger
作为数据成员,这里是多余的,
因为我们可以在初始化 LogStream
时调用 Poco::Logger
。
class Foo {
//...
Poco::SharedPtr<Poco::LogStream> logStream{
new Poco::LogStream(Poco::Logger::get("Foo"))};
};
要使 Foo
可复制,您可以使用 Poco::SharedPtr
.
我使用优秀的 Poco 框架进行日志记录。目前,我在头文件中这样定义 Logger 和 LogStream:
#Foo.h
....
class Foo
{
private:
Poco::Logger &logger = Poco::Logger::get("Foo");
Poco::LogStream logStream{ logger };
};
在我开始使用 boost::di 之前,它一直很好用。当我像这样使用 boost 注入器为 Foo 创建一个对象时,
injector.create<Foo>();
我收到一个编译器错误提示,
attempting to reference a deleted function
但是,如果我删除 LogStream 定义,则不会出现编译器错误。是否可以在header中声明LogStream而不定义它?我是 C++ 的新手,如果有人能指出我在这里做错了什么以及如何正确做,我会很高兴。非常感谢。
无法复制 Foo
的实例,原因有二:
1) logger
是引用,引用必须在创建Foo
时初始化,所以只有这样
要做到这一点是使用构造函数。
编译器无法生成复制赋值操作。所以 Foo f1,f2; f1 = f2;
无法工作。
2) LogStream
的基 class 是 std::ostream
,它禁用了复制操作。
解决方法:
删除 logger
作为数据成员,这里是多余的,
因为我们可以在初始化 LogStream
时调用 Poco::Logger
。
class Foo {
//...
Poco::SharedPtr<Poco::LogStream> logStream{
new Poco::LogStream(Poco::Logger::get("Foo"))};
};
要使 Foo
可复制,您可以使用 Poco::SharedPtr
.