通常對于單例類,必須一直這樣寫:
SomeSingleton::GetInstance().someVariable
我正在尋找一種隨處可見的簡化,所以應該放在類本身的(頭檔案和源檔案)檔案中。
所以,(非作業)的東西應該是這樣的:
SomeSingleton.hpp:
class SomeSingleton {
//...
static SomeSingleton& GetInstance();
};
SomeSingleton& (*INSTANCE)();
SomeSingleton.cpp:
SomeSingleton& (* INSTANCE)() = SomeSingleton::GetInstance;
但這被誤解為重新定義,因此不起作用。如果宣告和定義在同一行中,那會起作用,但它不會在任何地方使用的標頭中起作用。將指標分配給已宣告的 INSTANCE 變數并不比簡單地定義每個使用它的檔案的 INSTANCE 簡單。
一種解決方法是放一條線
static SomeSingleton& (*INSTANCE)() = SomeSingleton::GetInstance;
在我使用它的每個檔案中,并將每個 SomeSingleton::GetInstance 替換為 INSTANCE ,這有效但不理想,而且我不確定從設計方面來看,將單例分配給靜態變數是否明智(在某種意義上是靜態的東西另一個靜態的東西)。
對此有什么想法嗎?
uj5u.com熱心網友回復:
我認為你唯一缺少的是extern你的標題
extern SomeSingleton& (*INSTANCE)();
uj5u.com熱心網友回復:
我通常嘗試在沒有單例的情況下進行設計(并使用依賴注入),這對單元可測驗性更好。但是當真的需要時,我會使用這種模式。您還應該閱讀 Meyer 的單例模式。
// header file
struct SomeSingleton
{
int value{ 42 };
};
SomeSingleton& GetGlobalInstance();
// cpp file
SomeSingleton& GetGlobalInstance()
{
static SomeSingleton data;
return data;
}
// some other cpp file
int main()
{
return GetGlobalInstance().value;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/509956.html
標籤:C 指针单身人士
