Я работаю над реализацией очень, очень базовой системы компонентов в C , но сейчас я нахожусь в точке, где я хочу "динамически" вызывать некоторые функции. Установка очень проста: основная программа - это просто бесконечный цикл while, в котором проверяются некоторые условия и в котором вызывается функция «process» для каждого включенного компонента.
Например, теперь это работает так:
while (1) {
input_process();
network_process();
graphics_process();
}
Но я хочу разделить его на отдельные компоненты и каким-то образом определить в центре, какие части используются. Это можно сделать с помощью простых определений, например:
#define HAS_NETWORK
...
while (1) {
input_process();
#ifdef HAS_NETWORK
network_process();
#endif
graphics_process();
}
Как вы можете видеть, это нормально для 1 или, может быть, только для нескольких компонентов, но если я хочу сделать это для всех этих (входных, сетевых и графических) и дополнительных компонентов в будущем, я должен был бы поместить отдельные #ifdefs там для каждого из них, и это довольно утомительно.
В псевдокоде я пытаюсь выполнить следующее:
components = {'input', 'network', 'graphics'}
...
foreach component in components
execute component_process()
Таким образом, компоненты могут быть легко добавлены в будущем.
Я не против, если проверка будет выполнена во время компиляции или во время выполнения (хотя я, очевидно, предпочитаю время компиляции, но я могу представить, что время выполнения легче реализовать). Я понятия не имею, с чего начать.