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

时间:2013-08-07 15:54:44

标签: c++ c audio casting typedef

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

跟踪每个函数(样本或帧?)的语义以及何时对nChannels进行mult或div变得越来越难,所以我想以某种方式做一个typedef samples_t和frames_t(到unsigned int)并且有编译器帮助我...

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

如果你想要的只是不可转换的类型,BOOST_STRONG_TYPEDEF就可以解决这个问题:它可以让你组成多个类型,这些类型都是unsigned但在传递时彼此不可转换

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