Сегодня я хотел бы задать вам вопрос о возможностях C ++ для реализации конкретной архитектуры программного обеспечения.
Конечно, я использовал поиск, но не нашел прямого ответа.
По сути, моя цель - создать программу, которая позволяет пользователю моделировать и моделировать произвольно составленные физические системы, например, вождение автомобиля. Я предполагаю иметь библиотеку физических моделей (функций внутри классов). Каждая функция может иметь несколько входных данных и возвращать некоторые выходные данные в зависимости от базового физического описания, например, модель двигателя внутреннего сгорания, модель аэродинамического сопротивления, модель колеса и т. Д.
Теперь идея состоит в том, чтобы предоставить пользователю структуру, которая позволяет ему составлять любые функции в соответствии с его потребностями, то есть отображать любое физическое поведение. Структура должна обеспечивать функциональные возможности для соединения выходов и входов различных функций. Следовательно, платформа предоставляет контейнерный класс. Я называю это COMPONENT, который может содержать один или несколько объектов модели (FUNCTION). Эти контейнеры также могут содержать другие компоненты (см. Составной шаблон), а также соединения (CONNECTOR) между параметрами функции. Кроме того, класс компонента предоставляет некоторые общие числовые функции, такие как математическое решение и так далее.
Состав функций должен быть сделан во время выполнения. В первом случае пользователь должен иметь возможность настроить композицию путем импорта XML, который определяет структуру композиции. Позже можно подумать о добавлении GUI.
Чтобы дать вам лучшее понимание, вот очень упрощенный пример:
<COMPONENT name="Main">
<COMPONENT name="A">
<FUNCTION name="A1" path="lib/functionA1" />
</COMPONENT>
<COMPONENT name="B">
<FUNCTION name="B1" path="lib/functionB1" />
<FUNCTION name="B2" path="lib/functionB2" />
</COMPONENT>
<CONNECTIONS>
<CONNECTOR source="A1" target="B1" />
<CONNECTOR source="B1" target="B2" />
</CONNECTIONS>
</COMPONENT>
Нет необходимости углубляться в возможности фреймворка, потому что моя проблема гораздо более общая. Когда код / программа платформы компилируется, описание физической проблемы, а также пользовательские функции не известны. Когда пользователь выбирает (через XML или позже через GUI) функцию, платформа должна прочитать информацию о функции, т.е. должна получить информацию о входных и выходных параметрах, чтобы предложить пользователю возможность соединять функции.
Я знаю принципы рефлексии и знаю, что C ++ не предоставляет эту функцию. Тем не менее, я уверен, что понятие «создание объектов во время выполнения» очень часто требуется. Как мне настроить мою программную архитектуру на C ++ для достижения моей цели? Является ли C ++ правильным языком? Что я пропускаю?
Заранее спасибо!
Ура, Оливер