我正在开发一个数据收集控制器的应用程序.它必须与许多不同的其他设备连接,这反过来可能提供不同类型和数量的数据.为此,设计了以下层次结构(它有点冗长,但请耐心等待):
信息的基本单位是基准.Datum本身是一个抽象类,其后代代表不同类型的[物理]数量:温度,压力,能量,功率,中继状态等.每个Datum实例代表一个读数(在某个时刻).
数据由Devices 收集,而s又包含几个IOs.Device实例表示具体的物理数据收集设备; 它的类(抽象Device类的后代)表示设备的模型,并包含与其接口并从中提取读数所需的所有模型特定的代码.这是通过调用虚函数完成的void
Device::update().
每个IO实例代表一个设备收集的变量.例如,如果设备是多通道温度监视器,则IO表示连接到设备的单个传感器.可以通过调用来查询IO IO::get_value(),返回a Datum.
最后,Node该类保留了连接到控制器的所有设备的列表,这些设备中所有IO的另一个列表,并提供了一次轮询所有设备,单个设备,单个IO等的方法.
这些关系(有点松散地)反映在下图中:
现在,针对问题本身:
在所有这些中,抽象类的后代的许多实例必须一直传递并存储:节点存储其 设备和它们的IO,设备本身也存储它们自己的IO,数据被创建并返回并传递并销毁,设备和IO列表更新到位,等等.但目前还不清楚如何实现所有这些传递:
所以我不知道如何实现一个强大的交换这样的对象的系统,用或多或少的万无一失的方式确保对象表现为一个由值传递的变量(只要它们存在就一直存在)需要,但不会更长)同时保留通过继承公共接口提供的duck-typing.