0

独自の命令セットを備えた小さな仮想コンピューターを作成しています。問題を引き起こしているのは算術命令 (add、mul、div など) です。さまざまなサイズ (8、16、32、および 64 ビットの符号付きおよび符号なし) のオペランドで動作できるようにするためです。整数、および 32 ビットと 64 ビットの浮動小数点 - 基本的に、すべての数値 C# プリミティブ型)。オペランドの型は、実行時までわかりません。

ただし、C# でこれを行うエレガントな方法はわかりません。通常、私が書いている特別なスタック型に存在するオペランドは、Pop メソッドによって返されますが、私の知る限り、メソッドは 1 つの戻り値の型しか持てません。

同様に、算術命令を実行するメソッドでは、オペランドのサイズが異なるということは、かなり手に負えない switch ブロックを作成する必要があることを意味します。

というキーワードを見たdynamicことはありますが、IronRuby/IronPython との相互運用に適していると聞きました。

objectブロックを切り替えたり、すべてをsでボクシングしたりすることなく、これをエレガントに解決できる方法はありますか?

4

1 に答える 1

1

これはあなたが探しているものですか?

public static T Add<T>(T a, T b) where T: struct
{
    dynamic first = a;
    dynamic second = b;
    return first + second;
}

必要な数学演算子ごとに、このような一般的なメソッドを作成できます。

于 2013-09-14T14:55:03.647 に答える