5

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

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

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

4

3 回答 3

2

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

于 2013-08-07T16:07:20.437 回答
1

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

于 2013-08-07T15:57:44.943 回答
0

你不能这样做,typedef但 boost 可以帮助你。

如果您想要的只是不可转换的类型,BOOST_STRONG_TYPEDEF那么就可以解决问题:它将允许您组成多种类型,这些类型unsigned在传递时彼此之间是不可转换的。

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

于 2013-08-07T16:19:00.097 回答