0

我正在实现一个 SI 单位类型系统。为了确保单位不会漏进和漏出,我不希望将任何值隐式转换为单位,反之亦然。但是,能够将 0 转换为我的单位系统真的很方便,有点像你可以用指针做的那样,其中 0 隐式转换为空指针,但没有其他值可以。

所以我的问题是:我可以复制这种从 0 到空指针的隐式转换吗?或者我可以利用它来实现同样的目标吗?

例如,您会如何看待这样的构造函数?

constexpr unit_t(void*) : _value(0) { }

注意:单位本身是在类型中,而不是在值中。

编辑:为什么要从 0 转换为单位?

我想要这个的原因是编写不了解单位的算法。例如,如果您有一个长度矩阵并且想要反转它,您首先计算它的行​​列式,如果它不为 0,则返回逆矩阵(否则,这是一个错误)。

因此,将 0 文字视为通用单元会很方便。这正是指针所发生的事情。您可以键入:

void* c = 0;

但不是:

void f(int a) { void *c = a; }
4

1 回答 1

2

经典的解决方案是指向某个用户无法命名的私有类型的指针。那样的话,他能得到匹配的东西的唯一方法是通过隐式转换 from 0。(使用void*意味着几乎可以传递任何可以转换为指针的东西。)

请注意,此解决方案仅适用于整数常数 0。如果用户想使用0.0(因为他认为double值更有意义),他不能。

您也可以考虑使用默认构造函数,以便客户端可以SomeUnit()在需要默认初始化时简单地编写。

于 2012-06-13T09:55:20.110 回答