Я пытаюсь написать модульное приложение для обработки аудио. Модульный означает, ну, у меня есть «модули» (я называю их узлами), которые имеют входы и выходы (есть несколько различных типов, которые имеют цветовую кодировку, например, зеленый означает выходной аудиосигнал, синий означает однозначное число вывод и т. д.). Я также стараюсь поддерживать разделенный интерфейс и логику программы.
Для реализации этой системы я написал классы, производные от моего пользовательского класса «datablock», которые по сути являются просто хранилищами различных типов данных, поэтому у меня есть «IntDataBlock», у меня есть «AudioDataBlock» и т. Д. Все эти классы имеют та же переменная («данные»), но с разными типами данных. Например, IntDataBlock имеет только тип int типа «data», а AudioDataBlock имеет, например, список с плавающей точкой как «data».
Кроме того, я написал класс «соединение», который соединяет выход узла с входом другого узла. ‘connection’ принимает два указателя на узлы в качестве аргументов конструктора, поэтому он знает, к каким узлам подключаться. Теперь вы должны знать, что каждый узел имеет производные объекты «блока данных» в качестве хранилищ значений ввода / вывода.
‘connection’ имеет функции для подключения его к двум блокам данных (одному выходу и одному входу), поэтому, как только узел 1 обрабатывает свои данные и имеет выходные данные, он обновляет свои выходные блоки данных, а затем класс ‘connection’ должен работать напрямую как мост, передающий данные с выхода узла 1 на вход узла 2. Но у меня есть проблема:
Поскольку я не могу поместить переменную «data» блоков данных в родительский класс «dataclass» (поскольку каждый производный класс представляет собой отдельный тип «data»), я не могу написать:
void NodeConnection::establishConnection()
{
node2.inputDatablock.data = node1.outputDataBlock.data;
}
…потому что «данные» не находятся в родительском классе «блок данных», поэтому технически не каждый «блок данных» должен иметь переменную «данные».
У вас есть идеи, как это решить? Я также был бы признателен, если бы кто-нибудь, кто знает лучший способ реализации такой связи, показал мне это.
Спасибо!
Хорошо, ребята, я решил проблему. Вместо того, чтобы передавать только переменные данные, я обмениваюсь всем блоком данных, который, как я обнаружил, имеет некоторые преимущества, поскольку в блоке данных есть больше переменных, которые также необходимо скопировать.
Других решений пока нет …