防止使用整数进行自动转换

我正在开发一个音频应用程序(用C ++编写),我有很多相互调用的函数,它们可以采用帧数(即1个单声道或2个立体声浮点样本)或原始数量的样本……

跟踪每个函数(样本或框架?)的语义以及何时通过nChannels跟踪多个或div,所以我想以某种方式做一个typedef samples_t和frames_t(到unsigned int)并让编译器帮助变得越来越困难我出去……

是否有任何简单的方法可以将从frames_t到samples_t的隐式转换在C ++中标记为错误?

除非frames_t和samples_t实际上是不同的类型。 你可以使它们包含一个包含整数的POD结构,但是对它们进行类型定义将没有任何效果。

您可以全力以赴,在boost.units中定义自己的系统,或者只使用BOOST_STRONG_TYPEDEF宏为每种类型创建一个强类型。

你不能用typedef来做,但是boost可以帮助你。

如果你想要的只是不可转换的类型, BOOST_STRONG_TYPEDEF就可以做到这一点:它将允许你组成多个类型,这些类型都是unsigned但在传递时彼此之间不可转换。

但是在您的特定应用程序中,您可能希望考虑增强单元框架,您可以在其中实际创建单元类型,其中算术的结果inheritance了正确的单位(例如, freq * time产生无单位)。