独自の命令セットを備えた小さな仮想コンピューターを作成しています。問題を引き起こしているのは算術命令 (add、mul、div など) です。さまざまなサイズ (8、16、32、および 64 ビットの符号付きおよび符号なし) のオペランドで動作できるようにするためです。整数、および 32 ビットと 64 ビットの浮動小数点 - 基本的に、すべての数値 C# プリミティブ型)。オペランドの型は、実行時までわかりません。
ただし、C# でこれを行うエレガントな方法はわかりません。通常、私が書いている特別なスタック型に存在するオペランドは、Pop メソッドによって返されますが、私の知る限り、メソッドは 1 つの戻り値の型しか持てません。
同様に、算術命令を実行するメソッドでは、オペランドのサイズが異なるということは、かなり手に負えない switch ブロックを作成する必要があることを意味します。
というキーワードを見たdynamic
ことはありますが、IronRuby/IronPython との相互運用に適していると聞きました。
object
ブロックを切り替えたり、すべてをsでボクシングしたりすることなく、これをエレガントに解決できる方法はありますか?