私は、クラスYがYとZ(インタフェース)から派生しています。このクラスのオブジェクトは、インタフェースZのみにアクセスできるvoid *としてライブラリに渡されます。[Z *として渡されない理由は、void *を受け付ける中間コンポーネントです]gccが多重継承のハックをハックする
gccサンクスのvtableはX、Yは同じアドレスを指しますが、ZはX + 8を指します。
したがって、私はオブジェクトをZに到達するために(Z *)(obj + 8)として型キャストする必要があります。この安全な、代替がありますか?私はRTTIを使うことができません。
static_cast(reinterpret_cast (obj))ここでobjはvoid * –
あなたのデザインに何か問題があると思います。もしend-of-chain関数が常に*にキャストされるvoid *を取得するとすれば、void *の代わりにZ *をとるように最初のチェーン内関数を変更するだけです(そして内部的にそれを渡しますさらにvoid *として)。あなたはきれいなインターフェイスを取得し、コンパイラは、すべての汚い作業を行うこのように。 – elmo