zigではインタフェースや継承のような機能を言語でサポートしていない。 従って、多態性はユーザーがコードで表現する必要がある。
0.8頃までしようされていた?LLVMの最適化に難があるため、後述のfat pointerベースの手法に置き換えられた。基本的にはインターフェースからメソッドを実行する際、vtableから対応するメソッドへのポインタを取り出し以下の手順で実行する。
- @fieldParamentPtrにてメソッドへのポインタから対応するインスタンスへのポインタを取得
- メソッドへのポインタの引数に取得したインスタンスへのポインタをセットして実行