Генерация функции во время выполнения имеет много недостатков (если это вообще возможно), и, как правило, нет веских причин делать это на языке, подобном C ++.Вы должны оставить это для языков сценариев (таких как Perl или Python), многие предлагают функцию eval()
, которая может интерпретировать строку как код сценария и выполнять ее.
Если вам действительно нужно что-то вродеeval()
на скомпилированном языке, таком как C ++, у вас есть несколько вариантов:
- Определите свой собственный язык сценариев и напишите для него синтаксический анализатор / интерпретатор ( много работы)
- Определите очень простой императивный или математический язык, который можно легко анализировать и оценивать с использованием известных шаблонов проектирования (например, Interpreter)
- Используйте существующий язык сценариев, который можно легко интегрировать в ваш кодчерез библиотеку (пример: Lua)
- Заполните строки кода, которые вы хотите выполнить во время выполнения через внешний интерпретатор или компилятор, и запустите их через операционную систему или загрузите их в вашу программу, используя dlopen / LoadLibrary / etc.
(3.), Вероятно, самый простой и лучший подход.Если вы хотите свести к минимуму внешние зависимости или если вам нужен прямой доступ к функциям и состоянию внутри вашей основной программы, я предлагаю вам перейти к (2.) Обратите внимание, что в этом случае вы можете иметь обратные вызовы в свой собственный код, поэтомувызов собственных функций из скрипта не является проблемой. Смотрите здесь учебник
Если вы можете выбрать язык, такой как Java или C #, есть также возможность использовать компилятор, встроенный в саму среду выполнения. Посмотрите здесь, как это сделать в Java