D 是否有“newtype”(如 Haskell 中)。
这是一个天真的问题,因为我只是浏览 D,但谷歌没有找到任何有用的东西。
在 Haskell 中,这是一种在编译时使同一事物的不同类型变得不同的方法,但不会导致任何运行时性能损失。
例如你可以为米、秒和公斤创建新类型(双精度)。如果您的程序将以米为单位的数量添加到以秒为单位的数量,则在编译时会出错,但在运行时会像两者都是双精度数一样快(它们在运行时)。
如果 D 没有类似于“新类型”的东西,那么处理量纲数量的公认方法是什么?
Thanks,
Chris.
在 D1.0 中有 typedef,它是从预定义类型到“新类型”的强类型。
D2.0 已经删除了这个,只保留了别名(C 中的 typedef 就是这样)。有人谈论拥有一个可以强有力地创建新类型的包装模板。
typedef 的问题在于,有很好的论据可以使 newtype 成为预定义类型的子类型,也有很好的论据可以使其成为超类型。
typedef 的语义是基类型隐式转换为 newtype,但 newtype 不转换为基类型或具有相同基类型的其他类型。我在这里使用基本类型,因为:
typedef int Fish;
typedef Fish Cat;
Fish gold = 1;
Cat fluff = gold;
会编译失败。
截至目前,2.048 DMD 仍然允许使用 typedef(但不要使用它)。
将基本类型转换为新类型很有用,因此您不必编写
meters = cast(meters) 12.7;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)