可能重复:
如何强制初始化静态成员?
如何在创建时自动注册一个类
我有一个类应该在工厂中注册她的创建方法,这样我就可以使用工厂创建这个类。但是,只有当我在 main 方法中实例化类时,初始化才有效。
这是我要注册的课程:
class CDESolverD2Q5 : public CDESolver
{
public:
static CDESolver* create()
{
return new CDESolverD2Q5;
}
private:
static const std::string name_;
/**
* @brief registered_ if true then class is registered w/ Solver Factory
*/
//only for accessing this element from the main method
public:
static const bool registered_;
/**
* @brief registerLoader Registers the Solver with the factory.
* @return A boolean that indicates if the registration was successful
*/
static bool registerLoader();
};
这里是cpp文件中的代码:
const std::string CDESolverD2Q5::name_ = "CDESolverD2Q5";
bool CDESolverD2Q5::registerLoader()
{
return SolverFactory.registerType(CDESolverD2Q5::name_, CDESolverD2Q5::create);
}
const bool CDESolverD2Q5::registered_ = CDESolverD2Q5::registerLoader();
这里是我工厂的 registerType 方法:
bool registerType(const IdentifierType& id,
ProductCreatorSignature creator)
{
return productMap_.insert(typename ProductMap::value_type(id, creator)).second;
}
但是,仅当我在 main 方法中访问静态成员时才初始化它:
int main(int argc, char* argv[]) {
//how can I avoid the next line?
bool blub = CDESolverD2Q5::registered_;
CdeSolver* solver =SolverFactory.createObject("CDESolverD2Q5");
}
如果我删除该行 bool blub = CDESolverD2Q5::registered_;
该类未在我的工厂中注册。但是我认为静态成员在执行 main 方法之前会自动初始化,那么为什么我需要这一行以及如何避免这一行?