Здравствуйте! У меня такая вот дилемма.
Нужно писать программу (типа нейронной сети) которая состоит из маленьких модулей.
Причем. Состав и очередность модулей может быть разная.
1. Например если я заранее знаю какие модули и как будут вычислять я напишу так.
void MyFunction(double &INOUT_A, double &IN_B, double &OUT_E)
{
/// Входные данные А - Б.
///======= 1 модуль =======
double С = А + Б
///======= 2 модуль =======
double D = C * A
///======= 3 модуль =======
E = (D * B) ^ 2
/// Выходные данные А - E
}
Скомпилирую этот код. И естественно он будет выполняться молниеносно (количество модулей может быть очень большим).
2. Теперь мне нужно чтобы в процессе работы уже скомпилированной программы. Она (программа) читала файл и определяла количество и порядок модулей. для расчета и вычисляла его.
Я собираюсь решать это с помощью классов.
Имеем базовый class NODE с виртуальной функцие calc()
От базового класса создаем набор модулей.
Теперь код будет выполняться следующим образом:
А) Создание массива ссылок базового класса NODE.
B) Заполнение его нужными элементами.
C) Связывание (линкование) входных и выходных данных в дочерних классах.
D) Циклический обход массива:
while(....)
{
Node[i]->Calc();
}
Вроде все нормально будет работать.
Но
2.1. Выполняться этот обход массива будет много много раз.
2.2. Нужно как можно большее быстродействие.
3. Вопросы:
Можно ли как то создавать исходный код в процессе работы программы.
То есть. Я вижу это так.
3.1 Необходимо выделить необходимый объем памяти в программе.
3.2 Заполнение его кодом.
3.3 Получение ссылки на входные регистры, выходные регистры, и на основную функцию запуска расчета.
3.4 запускать эту функцию и наслаждаться таким же быстродействием как и в 1-ом примере.
4.
4.1 Скажите пожалуйста ссылки где такое могло быть реализовано.
4.2 Без Ассемблера это не реализовать?
Заранее спасибо за Ответы.