我正在为我们公司的设备开发一个硬件库,其中需要访问相机和不同类型的照明。基本的硬件接口设计如下
public ref class IHardware abstract {
protected:
ICamera* camera;
ILight^ light;
...
public:
IHarware();
...
virtual bool acquireImage() abstract;
...
};
这里,ICamera
和ILight
是相应硬件部分的接口。我需要开发的 DLL 包含上述接口以及IHardware
针对我们标准设备的专门化,我们称之为SHardware
. 该设备的特殊化也存在于ICamera
和ILight
,即SCamera
和SLight
。因为我想使用 RAII,所以构造函数SHardware
看起来像
SHardware::SHardware : IHardware() {
...
camera = new SCamera();
camera->Init();
light = gcnew SLight();
light->Init();
...
}
现在,假设我想使用该 SHardware 类进行进一步的专业化,例如一个名为NHardware
. 我有NCamera
继承自SCamera
和NLight
继承自的类SLight
。我的问题是如何实现NHardware
; 如果是这样
NHardware::NHardware() : SHardware() {...}
camera
并且light
已经初始化SHardware()
,因此我必须delete
在创建对象之前对它们进行初始化NCamera
,NLight
这对我来说似乎不正确。当然我可以以某种方式在单独的虚函数中提取相机和照明初始化并在NHardware
类中覆盖它,但是当SHardware
调用构造函数时,不也是SHardware
首先使用初始化函数吗?我确信这是一个相当简单的解决方案的常见问题,但现在我只是不明白,所以任何帮助表示赞赏!谢谢,
马茨