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