我想使用 boost::call_once() 来实现线程安全的惰性构造单例方案,但是,基单例类有许多派生类,因此 getInstance() 函数需要一个参数来确定要初始化哪个派生类。代码看起来像,
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()
其中使用的所有内容制作成静态的?
谢谢。