假设我需要在构造函数初始化任何成员变量之前调用一个免费的 GlobalInitializer()。例如:
class Foo {
public:
Foo() : bar_()
{
// calling GlobalInitializer() here is too late
}
Bar bar_;
};
在 Foo 中调用 GlobalInitializer() 为时已晚,因为我需要在 bar_ 初始化之前调用它。为此,我的 hacky 工作是创建一个超类:
class MyInitializer {
protected:
MyInitializer() {
GlobalInitializer();
}
};
class UglyFoo : public MyInitializer
{
public:
UglyFoo() : bar_()
{ }
Bar bar_;
};
UglyFoo 完成了工作,但它需要这个丑陋的 MyInitializer 类。是否有更简洁的设计模式或重构可以达到相同的结果?
附加说明: GlobalInitializer() 是一个昂贵的调用,除非用户实例化 Foo(),否则我想避免这种调用。GlobalInitializer() 内部有针对多个调用的保护。此外,可能还有其他类,比如 FooBar,也需要调用 GlobalInitializer(),但在一个进程中,GlobalInitializer() 实际上会工作一次(如果 Foo 或 FooBar 被实例化)甚至一次都不会(如果没有Foo 或 FooBar 的实例化)。