因此,我正在使用组合将一组对象组合在一起,所有这些对象都派生自一个基类,比方说 Component。例如:
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()
,派生类可以在对象完成后调用它来启动线程建。这是一个有效和适当的设计选择,还是有一个我可能会忽略的模式?谢谢。
最佳答案
组件可以有一个带有一个参数的构造函数来初始化 m_address。
关于c++ - 设计替代?组成和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004035/