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