使用RAII和继承的构造函数实现

时间:2013-09-02 07:52:58

标签: inheritance constructor c++-cli raii

我正在为我们公司的设备开发一个硬件库,其中包括需要访问摄像头和不同类型的照明。基本硬件接口的设计类似于

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() {...}

cameralight已在SHardware()中初始化,因此在创建deleteNCamera之前,我必须先NLightNHardware对象,这对我来说似乎不正确。当然,我可以以某种方式在单独的虚函数中提取相机和照明初始化,并在SHardware类中覆盖它,但是当调用SHardware构造函数时,{{1}}初始化也不是功能先用? 我相信这是一个相当简单的解决方案的常见问题,但是现在我只是没有得到它,所以任何帮助都表示赞赏!谢谢,

Matz的

0 个答案:

没有答案