1

我正在为我们公司的设备开发一个硬件库,其中需要访问相机和不同类型的照明。基本的硬件接口设计如下

public ref class IHardware abstract {

protected:
    ICamera* camera;
    ILight^ light;
    ...

public:
    IHarware();
    ...
    virtual bool acquireImage() abstract;
    ...
};

这里,ICameraILight是相应硬件部分的接口。我需要开发的 DLL 包含上述接口以及IHardware针对我们标准设备的专门化,我们称之为SHardware. 该设备的特殊化也存在于ICameraILight,即SCameraSLight。因为我想使用 RAII,所以构造函数SHardware看起来像

SHardware::SHardware : IHardware() {
    ...
    camera = new SCamera();
    camera->Init();
    light = gcnew SLight();
    light->Init();
    ...
}

现在,假设我想使用该 SHardware 类进行进一步的专业化,例如一个名为NHardware. 我有NCamera继承自SCameraNLight继承自的类SLight。我的问题是如何实现NHardware; 如果是这样

NHardware::NHardware() : SHardware() {...}

camera并且light已经初始化SHardware(),因此我必须delete在创建对象之前对它们进行初始化NCameraNLight这对我来说似乎不正确。当然我可以以某种方式在单独的虚函数中提取相机和照明初始化并在NHardware类中覆盖它,但是当SHardware调用构造函数时,不也是SHardware首先使用初始化函数吗?我确信这是一个相当简单的解决方案的常见问题,但现在我只是不明白,所以任何帮助表示赞赏!谢谢,

马茨

4

0 回答 0