我正在尝试编写一个模块化的音频处理应用程序。模块化意味着,嗯,我有“模块”(我称它们为节点),它有输入和输出(有几种不同的类型,它们是用颜色编码的,例如绿色表示音频输出,蓝色表示单个数字输出等)。我还尝试将 UI 和程序逻辑分开。
为了实现这个系统,我编写了从我的自定义“datablock”类派生的类,它们本质上只是不同的数据类型存储,所以我有一个“IntDataBlock”,我有一个“AudioDataBlock”等。所有这些类都有相同的变量(“数据”),但具有不同的数据类型。例如,一个 IntDataBlock 只有一个 int 类型“数据”,但一个 AudioDataBlock 有一个浮点列表作为“数据”。
此外,我还编写了一个“连接”类,它将一个节点的输出与另一个节点的输入连接起来。'connection' 将两个节点指针作为构造函数参数,因此它知道要连接哪些节点。现在您必须知道,每个节点都有“数据块”派生对象作为输入/输出值存储。
'connection' 具有将其附加到两个数据块(一个输出和一个输入)的功能,因此一旦节点 1 处理它的数据并具有输出数据,它就会更新它的输出数据块,然后 'connection' 类应该直接作为一个桥,将数据从节点 1 的输出传输到节点 2 的输入。但是我有一个问题:由于我不能将数据块的“数据”变量放在父类“数据类”中(因为每个派生类都为不同类型的“数据”),我不能写:
void NodeConnection::establishConnection()
{
node2.inputDatablock.data = node1.outputDataBlock.data;
}
...因为“数据”不在父类“数据块”中,所以从技术上讲,并非每个“数据块”实际上都必须有一个变量“数据”。
你知道如何解决这个问题吗?如果有人知道实现这种连接的更好方法,我也将不胜感激,向我展示这一点。谢谢!