Types 如何在D中创建强类型别名?

Types 如何在D中创建强类型别名?,types,d,Types,D,如何在D中创建强类型别名?比如: alias euro = uint; alias dollar = uint; euro toEur(dollar pd) { ... } dollar toDollar(euro pe) { ... } 强类型别名实际上是一种新类型,因此只需使用普通结构: struct euro { uint amount; } 如果您希望它隐式转换为uint和uint,还可以添加别名amount,但这会削弱输入,因此您可能不想这样做。您需要的是,这基本上符合

如何在D中创建强类型别名?比如:

alias euro = uint;
alias dollar = uint;

euro toEur(dollar pd) { ... }
dollar toDollar(euro pe) { ... }

强类型别名实际上是一种新类型,因此只需使用普通结构:

struct euro {
     uint amount;
}

如果您希望它隐式转换为uint和uint,还可以添加
别名amount,但这会削弱输入,因此您可能不想这样做。

您需要的是,这基本上符合Adam的建议。

我已经考虑过这一点,但这不需要我每次都输入euro.amount吗?不是用
别名amount this
,然后,每当你要求购买欧元本身不起作用的东西时,它都会隐式地使用
amount
。因此,您可以将其作为uint传递,从uint分配(除非您重载opAssign并更改它),等等。这如何削弱键入?我刚刚尝试了一个测试用例,它不接受uint与euro混合。alias这有点像继承,通过它,euro可以隐式转换为它的“基本类型”uint。如果您在接受uint的
dollar
上还有一个opAssign或ctor,那么它会让dollar=euro编译,将euro转换为uint,然后运行该构造函数,这可能会破坏系统。所以我不是说这是一件坏事,只是需要注意和处理适合你的情况。