多级接口 - 返回指向基接口的指针

时间:2017-01-09 07:31:38

标签: c++ interface

在C ++中,有多个级别的接口是安全/可行的,但只返回指向基类的指针,然后再将其转换为什么?

示例:

class ILight
{
    virtual vec3 Colour() = 0;
    virtual void Colour(vec3 colour) = 0;
};

class ISpotlight : public ILight
{
    virtual vec3 Position() = 0;
}

我在Spot中实现ISpotlight。在工厂我有一个功能:

ILight *CreateSpot()
{
    return new Spot();
}

如果我想稍后使用它我可以static_cast<Spot>。原因是我可以拥有不同类型的灯。

2 个答案:

答案 0 :(得分:1)

  

在C ++中,有多个级别的接口是安全/可以的,但是只返回基本接口,然后再将它投射出来?

  

如果我想稍后使用它,我可以使用static_cast。

我建议不要使用static_cast。我建议使用dynamic_cast,检查演员表是否成功,并仅在dynamic_cast成功时使用指针。

答案 1 :(得分:0)

  

但只返回指向基础的指针,然后再将其投射?

这表示除了几个场景之外的所有场景中都存在设计错误(例如,命名对象的缓存)。