【发布时间】:2014-04-24 15:11:08
【问题描述】:
假设有两种类型:
typedef unsigned short Altitude;
typedef double Time;
为了检测一些错误,例如在编译时将高度位置的时间参数传递给函数,我想禁止从 Altitude 到 Time 的隐式转换,反之亦然。
我首先尝试的是声明一个没有实现的operator Altitude(Time),但编译器说它必须是一个成员函数,所以我明白它不适用于typedefed 类型。
接下来我尝试将其中一种类型转换为一个类,但似乎该项目广泛使用了许多算术,包括对double、int、bool 等的隐式转换,以及传递它们通过operator<< 和operator>> 往返于流中。因此,尽管这种方式让我能够找到我正在寻找的错误,但我什至没有尝试完全实现兼容类,因为这需要大量代码。
所以我的问题是:有没有更优雅的方法来防止两个特定 typedefed 类型之间的隐式转换,如果是,那么如何?
【问题讨论】:
-
typedefs与此无关。它们不是新类型。它们是现有类型的别名。 -
为什么是
Time?已经有std::chrono::duration -
@MSalters 因为它更符合它的目的(有很多算术),并且因为项目在 C++11 还不存在时就开始了。
标签: c++ type-conversion implicit-conversion