C++ 保持对我的记录器的可变引用是一个好主意吗?
我有一个抽象的C++ 保持对我的记录器的可变引用是一个好主意吗?,c++,C++,我有一个抽象的Logger类和一个虚拟的Log(std::string const&)方法。这样我就可以实现任何类型的日志记录 该方法不是const,因为例如,我可以创建我的记录器的Qt实现(QtLogger)。它将登录到一个小部件,从而修改一个对象 现在让我们假设我保留了一个唯一的QtLogger对象,并通过引用将其传递给需要记录某些内容的任何对象。问题是Log()方法不是常量,因此我无法在常量方法中记录任何内容 保留对我的QtLogger的可变引用是一个好主意吗 如果是,那么为什么gcc会出
Logger
类和一个虚拟的Log(std::string const&)
方法。这样我就可以实现任何类型的日志记录
该方法不是const,因为例如,我可以创建我的记录器的Qt实现(QtLogger
)。它将登录到一个小部件,从而修改一个对象
现在让我们假设我保留了一个唯一的QtLogger
对象,并通过引用将其传递给需要记录某些内容的任何对象。问题是Log()
方法不是常量,因此我无法在常量方法中记录任何内容
保留对我的QtLogger
的可变引用是一个好主意吗
如果是,那么为什么gcc会出现以下错误?(4.6.1)引用“\u logger”不能声明为“可变”[-fppermissive]
编辑:我如何声明引用:
QtLogger-mutable&\u-logger代码>记录器界面应始终为const
,用户不必知道在记录内容时您可能会更改内容。更好的设计是使Log
方法const
,并告诉派生类,如果他们想在Log方法中更改成员,就必须使其成员可变
,不要将这部分推给用户
为了回答您的实际问题,我假设您对引用的定义如下:
QtLogger& mutable _logger;
如果是,这将不起作用,因为引用本身无论如何都不能更改。您需要像这样移动mutable
:
QtLogger mutable& _logger;
如果您以另一种方式定义了\u logger
,请显示您的代码。有点迷失在故事中(我从未使用过mutable),但const cast可以解决您的问题吗?我的代码就是:logger mutable&\u logger代码>。我不理解gcc给我的错误。无论如何,谢谢!我会照你说的做:)@paps:奇怪的东西,但请试试我在答案第一部分的建议,也许问题就这样解决了P