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