【发布时间】:2011-07-06 05:55:54
【问题描述】:
我希望有一种方法来定义不会自动转换为它们的基本类型或相互转换的计算类型(例如,行为类似于“有限 int”的东西)——行为类似于类型指针。
例如,我希望能够定义 XCoord 和 YCoord 类型以用于 X 和 Y 坐标。当然,我可以使用 typedef, 来做到这一点,它使我的代码更加明确,但我真正想要的是当我不小心将 Y 坐标作为函数调用参数传递时,编译器会抱怨应该使用 X 坐标。另一个用例是将尺寸单位与数字相关联,以便在有人不小心将高度以米为单位的数字添加到以克为单位的重量时获得投诉。
是的,我知道,这个例子很简单,掩盖了很多问题。我想指定数值。我想遍历值的范围。我想减去两个 XCoord 值(并得到一个 int?)。我想将它们用作数组下标。我确信有很多我没有详细考虑过的用法——虽然让它们都透明地工作会很好,但我不反对一点语法上的不便(比如成员函数调用)在某些用法中。
我大部分时间都可以看到如何使用模板和运算符重载来破解一个解决方案,并且可能会得到我想要的很多东西。但是,我希望有一个解决方案,其创建者已经完成了艰苦的工作并探索了极端情况,并在便利性和功能之间做出了适当的折衷。
当然,它们只是添加了编译时检查的基本类型——因此该解决方案相对于基本类型应该具有零运行时性能损失,就像 typedef
这样的事情存在吗?使用语言构建的解决方案是否如此复杂且充满惊喜,以至于我最好使用普通的旧 typedefs 和类似 lint 的工具来代替?如果有,有没有这样的工具?
【问题讨论】:
标签: c++ types type-conversion