在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>
。原因是我可以拥有不同类型的灯。
答案 0 :(得分:1)
在C ++中,有多个级别的接口是安全/可以的,但是只返回基本接口,然后再将它投射出来?
是
如果我想稍后使用它,我可以使用static_cast。
我建议不要使用static_cast
。我建议使用dynamic_cast
,检查演员表是否成功,并仅在dynamic_cast
成功时使用指针。
答案 1 :(得分:0)
但只返回指向基础的指针,然后再将其投射?
这表示除了几个场景之外的所有场景中都存在设计错误(例如,命名对象的缓存)。