多级接口-返回指向基本接口的指针 在C++中,有多个接口级别是安全的,但是只返回指向基的指针,然后再将它抛在后面?

多级接口-返回指向基本接口的指针 在C++中,有多个接口级别是安全的,但是只返回指向基的指针,然后再将它抛在后面?,c++,interface,C++,Interface,例如: class ILight { virtual vec3 Colour() = 0; virtual void Colour(vec3 colour) = 0; }; class ISpotlight : public ILight { virtual vec3 Position() = 0; } 我在现场安装了ISpotlight。在工厂中,我有一个功能: ILight *CreateSpot() { return new Spot(); } 如果我

例如:

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

class ISpotlight : public ILight
{
    virtual vec3 Position() = 0;
}
我在现场安装了ISpotlight。在工厂中,我有一个功能:

ILight *CreateSpot()
{
    return new Spot();
}
如果我以后想使用它,我可以
静态\u cast
。原因是我可以有不同类型的灯

在C++中,有多个接口级别是安全的,但是只返回基类,然后再将其丢弃?

如果我以后想用它,我可以用静态的

我建议不要使用
static\u cast
。我建议使用
dynamic\u cast
,检查强制转换是否成功,并且仅当
dynamic\u cast
成功时才使用指针

但只返回指向基指针的指针,然后在以后强制转换它


这表明在除少数情况外的所有情况下都存在设计错误(例如,命名对象的缓存)。

如果函数总是返回
ISpotLight*
,那么将
ILight*
设置为返回类型而不是
ISpotLight*
,会有什么好处?
ILight
需要虚拟析构函数