所以我使用组合来汇集对象的集合,所有这些对象都是从基类派生的,可以说组件。 E.g:设计替代?组成和构造
class Component {
public:
Component();
...
private:
int m_address;
...
};
class SpecializedComponent: public Component {
public:
SpecializedComponent()
... //and so on
};
class SpecializedComponent2: public Component {
public:
SpecialIzedComponent2()
... //and so on
};
class ComponentHolder{
SpecializedComponent* m_descriptiveName;
SpecializedComponent2* m_descriptiveName2;
// and so on... many different types of components
}
因此,每个SpecializedComponentX将通过网络进行通信与个人数据源,每一个都有自己独特的地址。这些地址在参数文件中指定。目前,我正在解析参数文件,m_address
在派生类构造函数中初始化 - 这是因为每个m_address都是由我们正在初始化的对象类型指定的。
每个SpecializedComponentX都有一些我想在基类Component中执行的常用功能。所以,我启动了一个与基类Component相关的线程,对吧?当然 - 有道理。直到我意识到我还没有该组件的目标地址 - 因为该对象尚未完全构建。我想旋转ctor中的基类线程,但我还不知道m_address
。
我想到解决这个问题的唯一方法是提供一个(简单的)虚拟函数void start()
,派生类可以调用一旦对象完全构造就旋转起来的线程。这是一个有效的和适当的设计选择还是有一种模式,我可以忽略?谢谢。
是的,当然。有时候显而易见的事情是正确的。 – jdt141 2010-01-05 16:36:24