对各种大小的操作数进行数学运算,仅在运行时已知

时间:2013-09-14 14:46:33

标签: c# math types stack

我正在编写一个小型虚拟计算机,并配有自己的指令集。给我带来问题的是算术指令(add,mul,div等),因为我希望它们能够处理各种不同大小的操作数(8,16,32和64位有符号和无符号)整数,32位和64位浮点 - 基本上,每个数字C#基本类型)。直到运行时才知道操作数的类型。

但是,我不确定在C#中做任何优雅的方法。操作数通常位于我正在编写的特殊堆栈类型上,将由Pop方法返回,但据我所知,方法只能有一种返回类型。

同样,在执行算术指令的方法中,具有不同的操作数大小意味着我需要编写一个相当不守规矩的开关块。

我见过dynamic关键字,但我听说它更适合与IronRuby / IronPython互操作。

有没有什么办法可以优雅地解决这个问题,而不需要在object s中使用切换块或装箱一切?

1 个答案:

答案 0 :(得分:1)

这是你要找的东西吗?

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

您可以为您需要的每个数学运算符创建这样的通用方法。