如何将0(和仅0)转换为我的数据结构

时间:2012-06-13 09:03:31

标签: c++ types typeconverter

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

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

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

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

注意:单位本身属于类型,而不是值。

编辑:为什么从0投射到单位?

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

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

void* c = 0;

但不是:

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

1 个答案:

答案 0 :(得分:2)

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

请注意,此解决方案仅适用于积分常量0.如果用户想要使用0.0(因为他认为double值更有意义),他可以“T

您可能还考虑使用默认构造函数,因此客户端只需在需要默认初始化时编写SomeUnit()