我正在开发一个音频应用程序(用C ++编写),我有很多相互调用的函数,它们可以采用帧数(即1个单声道或2个立体声浮点样本)或原始数量的样本......
跟踪每个函数(样本或帧?)的语义以及何时对nChannels进行mult或div变得越来越难,所以我想以某种方式做一个typedef samples_t和frames_t(到unsigned int)并且有编译器帮助我...
是否有任何简单的方法可以将从frames_t到samples_t的隐式转换在C ++中标记为错误?
答案 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
产生无单位)。