2015-04-12 32 views
0

最近,我開發了一個記錄器類C++/QT這是實現爲單例,因爲使用類中的每個應用程序是應該只有一個實例,最重要的是,我不希望有任何地方複製三分球,並沒有褻瀆我代碼有很多extern如何使用與Singleton一樣的類的許多對象?

但是,當我開始在項目中使用它的問題似乎,有其自己的日誌,這將有自己的日誌以及一個圖書館的使用。不過,我覺得一切都會正常工作(畢竟軟件是不是正在使用的庫),但我錯了:實際上是正在爲應用程序和使用的庫都創建只有一個日誌系統的實例。

現在我正面臨着這種情況,經過多次,我無法避開:我不想使用那個通常會用到的類,聲明一個對象並開始傳遞它到處extern,而是像在Singleton中那樣操作它:只是#include頭文件並通過全局實例()函數開始調用方法。我怎麼能做到這一點,而不使用Singleton在該記錄器類?

我想到的一種方法是在每個項目(lib和主應用程序)上創建一個不同的Singleton類,只是有一個記錄類的對象,但我有興趣聽到其他選擇。

+0

聽起來你正在尋找多單例模式,或者可能severalton的版本。 –

+0

@KerrekSB我從來沒有聽說過這些,我會看看。謝謝! – Momergil

+0

你的圖書館是靜態的還是動態的? –

回答

0

爲每個日誌實例分配句柄並按實例獲取日誌。在庫中添加爲庫返回句柄的函數,在應用程序中添加爲應用程序日誌返回句柄的函數。並且不要忘記singlton被用於設計模式,避免它們。