基类中的 C++ 数据 block

标签 c++ audio modular-design

我正在尝试编写一个模块化的音频处理应用程序。模块化意味着,嗯,我有“模块”(我称它们为节点),它有输入和输出(有几种不同的类型,它们是用颜色编码的,例如绿色表示音频输出,蓝色表示单个数字输出等)。我还尝试将 UI 和程序逻辑分开。

为了实现这个系统,我编写了从我的自定义“datablock”类派生的类,它们本质上只是不同的数据类型存储,所以我有一个“IntDataBlock”,我有一个“AudioDataBlock”等。所有这些类都有相同的变量(“数据”),但具有不同的数据类型。例如,一个 IntDataBlock 只有一个 int 类型“数据”,但一个 AudioDataBlock 有一个浮点列表作为“数据”。

另外,我编写了一个类“连接”,它将一个节点的输出与另一个节点的输入连接起来。 'connection' 将两个节点指针作为构造函数参数,因此它知道要连接哪些节点。现在您必须知道,每个节点都有“数据 block ”派生对象作为输入/输出值存储。

'connection' 具有将其附加到两个数据 block (一个输出和一个输入)的功能,因此一旦节点 1 处理它的数据并具有输出数据,它就会更新它的输出数据 block ,然后 'connection' 类应该直接作为一个桥,将数据从节点 1 的输出传输到节点 2 的输入。但是我有一个问题:
由于我不能将数据 block 的“数据”变量放在父类“数据类”中(因为每个派生类都是不同类型的“数据”),所以我不能写:

void NodeConnection::establishConnection()
{
    node2.inputDatablock.data = node1.outputDataBlock.data;
}

...因为“数据”不在父类“数据 block ”中,所以从技术上讲,并非每个“数据 block ”实际上都必须有一个变量“数据”。

你知道如何解决这个问题吗?如果有人知道实现这种连接的更好方法,我也将不胜感激,向我展示这一点。
谢谢!

最佳答案

好的,伙计们,我解决了这个问题。我不是只传输变量数据,而是交换整个数据 block ,我发现这有一些优势,因为数据 block 中有更多的变量也必须被复制。

关于基类中的 C++ 数据 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059261/

相关文章:

c++ - 如何更改 OpenGL 形状的线宽?

node.js - 参数类型 "X"不可分配给参数类型 "Y"

javascript - 如何使声音响应js html canvas中的按键?

ios - 使用NSTimer自定义声音

javascript - Webpack 在 JS 文件中抛出一个奇怪的语法错误

asp.net-mvc - 如何强制执行 ASP.NET MVC 中的关注点分离?

C++ 使用参数调用不带参数的回调 - 或者更好的解决方案

c++ - 在 Xcode 中静态链接 id3lib 的问题

c++ - 由于#define,VS2015 找不到成员函数 [c++] 定义

ios - 在应用程序中播放背景音乐?