2011-12-12 16 views
0

我有一個虛擬Log(std::string const&)方法的抽象Logger類。這樣我可以實現任何類型的日誌記錄。保持一個可變的參考我的記錄器一個好主意?

該方法不是常量,因爲我可以創建我的記錄器(QtLogger)的Qt實現。它會登錄到一個小部件,因此修改一個對象。

現在讓我們假設我保留一個唯一的QtLogger對象,並通過引用傳遞給需要記錄內容的任何對象。問題是Log()方法不是const的,所以我不能在const方法中記錄任何東西...

對我的QtLogger保留可變引用是個好主意嗎?

如果是,那麼爲什麼我會遇到以下gcc錯誤? (4.6.1)
reference ‘_logger’ cannot be declared ‘mutable’ [-fpermissive]

編輯:我如何聲明的參考:QtLogger mutable& _logger;

+0

有點失落的故事(我從來沒有用過mutable),但是const cast可以解決你的問題嗎? –

回答

0

記錄程序界面應始終const,用戶不必知道你可能變化的東西當他記錄什麼。更好的設計是製作Log方法const,並告訴派生類他們必須使其成員mutable如果他們想在日誌方法中更改它們 - 不要將該部分推送給用戶!

爲了回答您的實際問題,我想你定義的參考,像這樣:

QtLogger& mutable _logger; 

如果是,這是不行的,因爲引用本身不能改變反正。你需要移動mutable像這樣:

QtLogger mutable& _logger; 

如果以另一種方式定義的_logger,請出示你的代碼。

+0

我的代碼正好: 'Logger mutable&_logger;'。我不明白海灣合作委員會給我的錯誤。不管怎樣,謝謝!我會做你所說的:) – Martin

+0

@paps:奇怪的東西,但請嘗試我的建議在答案的第一部分,也許問題解決了自己與此。 :P – Xeo

+0

是的,謝謝! (對不起,我在編輯的同時回覆:p) – Martin

相關問題