2017-01-09 17 views
0

C++では複数のレベルのインターフェイスを使用できますが、基本インターフェイスへのポインタのみを返し、後でキャストできますか?複数レベルのインターフェイス - 基本インターフェイスへのポインタの返信

例:

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(); 
} 

私は後で私がstatic_cast<Spot>をすることができ、それを使用したい場合は、次の工場で、私は機能を持っています。その理由は、私はさまざまなタイプのライトを持つことができるからです。

+0

あなたの関数が常に 'ISpotLight *'を返すなら、 'ISpotLight *'の代わりに 'ILight *'を設定するとどんな利点がありますか? – Holt

+0

'ILight'には仮想デストラクタが必要です – Danh

答えて

1

C++では、複数のレベルのインターフェイスを持つことはできますが、基本のインターフェイスのみを返してから後でキャストしますか?

はい。

後で使用したい場合はstatic_castを使用できます。

static_castを使用しないことをお勧めします。 dynamic_castを使用することをお勧めします。キャストが成功したかどうかを確認し、dynamic_castが成功した場合にのみポインタを使用してください。

0

ただし、ベースポインタへのポインタを返してから後でキャストしますか?

これは、いくつかのシナリオ(名前付きオブジェクトのキャッシュなど)すべてで設計上のエラーが発生したことを示しています。

関連する問題