オブジェクト指向プログラミングでは、作成済みのオブジェクトの動作を変更できると便利な場合があります。もちろん、これは戦略パターンなどの比較的冗長な手法で行うことができます。ただし、インスタンス化後に vtable ポインターを変更して、オブジェクトの型を完全に変更した方がよい場合もあります。クラスAからクラスBに切り替えると仮定すると、これは安全です:
- クラス B はクラス A のサブクラスであり、新しいフィールドを追加しない、または
- クラス B とクラス A は同じ親クラスを持ちます。親クラスの仮想関数をオーバーライドする以外は何もしません。(新しいフィールドや仮想関数はありません。)
- いずれの場合も、A と B は同じ不変条件を持たなければなりません。
これは、C++ および D プログラミング言語でハック可能です。ポインターを任意にキャストできるためです。これを行う高レベルの方法が一般的に提供されていないのはなぜですか?