我想使用boost :: call_once()來實現線程安全的lazy-construction singleton場景,但是,基礎singleton類有許多派生類因此getInstance()函數接受一個參數來確定要初始化哪個派生類。代碼如下,如何在帶參數的函數上使用boost :: call_once()
Singleton * Singleton::getInstance(Input * a) {
if (!instance) {
instance = buildme(a); //buildme() will return a derived class type based on input a.
}
return instance;
}
我想用boost::call_once()
,但看起來它只能在功能不帶參數void (*func)()
使用。如果有人知道另一種解決方案,請幫忙。
謝謝。
編輯::
另一個問題是,如何調用使用call_once
非靜態成員函數?我有一個非靜態的init()
這個類的成員函數,但我找不到使用boost::call_once()
調用它的正確語法。或者我應該使init()
和它使用的一切都是靜態的?
謝謝。
實際上的std :: call_once的在C++ 11接受任何數量的參數,其是完全轉發到可調用所以不需要用於這種情況下的std ::綁定(一次標誌和可調用之後)。 – John5342
謝謝你們兩位。乍得的例子是非常有用的,現在我知道綁定的用法。還要感謝@ John5342讓我知道這些有用的信息。 – Derek
@ John5342應該是一個答案。會提高它。 – Walter