Как запустить код C ++ из C ++? - PullRequest
1 голос
/ 09 октября 2009

Если у меня есть некоторый код c ++ в качестве количества строки (данных) в программе на c ++, могу ли я выполнить содержимое этой строки?

Как использовать CodeDOM в C # или функцию eval, присутствующую в perl, python и т. Д.

Ответы [ 5 ]

10 голосов
/ 09 октября 2009

Краткий ответ: Вы не можете.

Немного более длинный ответ: C ++ не имеет отражения и, как правило, компилируется, поэтому нет никакой поддержки для такого рода вещей, и его нельзя легко добавить ..

Работа вокруг:

  1. Используйте встраиваемый динамический язык, такой как [python | tcl | ruby ​​| ...], в сочетании с вашим кодом C ++. Теперь вам нужно иметь динамический язык (а не с ++) в данных.
  2. Используйте интерпретатор c ++, например cint или ch. Это связывает вас с переводчиком.
  3. Используйте системный компилятор c ++ для создания динамической библиотеки из вашего кода и ссылки на нее на лету. Рискованно и зависит от системы.
  4. Используйте другой язык.
5 голосов
/ 09 октября 2009

Нет. Поскольку C ++ является статическим языком, вы не можете динамически оценивать произвольный код.

Вы можете интерпретировать его или даже скомпилировать и запустить отдельно, как предложил Кит

3 голосов
/ 09 октября 2009

если вы имеете в виду компиляцию кода C ++ на лету и запуск его? уверен, что если у вас есть компилятор

2 голосов
/ 09 октября 2009

C ++ не может этого сделать - скомпилированная программа не знает синтаксиса исходного языка, имен идентификаторов и т. Д.

Даже если вы попытаетесь записать строку в файл, вызвать компилятор c ++ для создания динамической библиотеки и загрузить и вызвать ее, этот вызов не будет иметь никакого знания о вашей программе - он не будет быть в состоянии ссылаться на ваши переменные и т. д.

Самая распространенная причина, по которой вы хотите это сделать, - это возможность оценивать выражения из строк. Написание кода для этого с нуля определенно нетривиально, но, в зависимости от ваших конкретных требований, вы сможете найти библиотеку или встраиваемый язык сценариев, чтобы примерно выполнить то, что вам нужно.

После быстрого Google, я нашел это - C, а не C ++, и я не знаю, насколько он хорош. Он написан как демо генератора парсера, о котором я не слышал. Вы можете найти альтернативы в виде демонстраций более известных генераторов синтаксических анализаторов, таких как yacc, bison, yacc ++ или antlr.

2 голосов
/ 09 октября 2009

Ни одна из основных реализаций C ++ не имеет такой возможности, поскольку C ++ не отражает.

Однако взгляните на Ch, это может быть то, что вы ищете:

http://www.softintegration.com/

http://en.wikipedia.org/wiki/Ch_interpreter

Вы можете встроить интерпретатор Ch в ваше приложение C ++ и запускать внутри него динамический код C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...