作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现一个 SI 单位类型系统。为确保单位不会漏进漏出,我不想将任何值隐式转换为单位,反之亦然。但是,能够将 0 转换为我的单位系统会非常方便,有点像您可以对指针所做的那样,其中 0 隐式转换为空指针,但没有其他值。
所以我的问题是:我可以复制这种从 0 到空指针的隐式转换吗?或者我可以利用它来实现同样的目标吗?
例如,您会如何看待这样的构造函数?
constexpr unit_t(void*) : _value(0) { }
注意:单位本身在类型中,不在值中。
编辑:为什么从 0 转换为一个单位?
我想要这个的原因是编写不知道单位的算法。例如,如果您有一个长度矩阵并且想要将其求逆,则首先计算它的行列式,如果它不为 0,则返回逆矩阵(否则,这是一个错误)。
因此,将 0 文字视为通用单位会很方便。这正是指针所发生的事情。您可以输入:
void* c = 0;
但不是:
void f(int a) { void *c = a; }
最佳答案
经典的解决方案是指向某个用户无法命名的私有(private)类型的指针。那样的话,他获得匹配内容的唯一方法是通过 0
的隐式转换。 (使用 void*
意味着几乎任何可以转换为指针的东西都可以传递。)
请注意,此解决方案仅适用于 integral 常量 0。如果用户想使用 0.0
(因为他认为 double
值使更有道理),他不能。
您还可以考虑使用默认构造函数,这样客户端在需要默认初始化时只需编写 SomeUnit()
。
关于c++ - 如何将 0(且仅 0)转换为我的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011509/
我是一名优秀的程序员,十分优秀!