我正在寻找 C++ 类设计问题的解决方案。我想要实现的是在基类中拥有静态方法方法,它将返回后代类型对象的实例。关键是,其中一些应该是单身人士。我正在用VCL编写它,所以有可能使用__properties
,但我更喜欢纯 C++ 解决方案。
class Base {
private:
static Base *Instance;
public:
static Base *New(void);
virtual bool isSingleton(void) = 0;
}
Base::Instance = NULL;
class First : public Base { // singleton descendant
public:
bool isSingleton(void) { return true; }
}
class Second : public Base { // normal descendant
public:
bool isSingleton(void) { return false; }
}
Base *Base::New(void) {
if (isSingleton())
if (Instance != NULL)
return Instance = new /* descendant constructor */;
else
return Instance;
else
return new /* descendant constructor */;
}
出现的问题:
- 如何声明静态变量
Instance
,所以它在后代类中是静态的
- 如何在基类中调用后代构造函数
我认为按照我计划的方式克服这些问题可能是不可能的。如果是这样,我想要一些关于如何以其他方式解决它的建议。
Edit:代码中的一些细微变化。我错过了其中的一些指针标记。
只是为了检查我们的术语是否同步 - 在我的书中,工厂类是一个类实例,它可以创建一些其他类的实例。创建哪种类型的实例的选择基于工厂收到的输入,或者至少基于它可以检查的内容。这是一个非常简单的工厂:
class A { ~virtual A() {} };
class B : public A {};
class C : public A {};
class AFactory {
public:
A * Make( char c ) {
if ( c == 'B' ) {
return new B;
}
else if ( c == 'C' ) {
return new C;
}
else {
throw "bad type";
}
}
};
如果我是你,我会重新开始,牢记这个例子和以下内容:
- 工厂不必是单例
- 工厂不必是静态成员
- 工厂不必是它们创建的层次结构的基类的成员
- 工厂方法通常返回动态创建的对象
- 工厂方法通常返回一个指针
- 工厂方法需要一种方法来决定创建哪个类的实例
我不明白为什么你的工厂需要反射,C++ 在任何情况下都不以有意义的方式支持反射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)