2013-04-09 5 views
-1

Функция Pythonexec() - очень хороший инструмент для программирования.Как реализовать функцию Python exec() в C++?

Например:

/****************************************************** 
* we have array names={"ali","hamed"} 
* goal is declare string ali="ali" and hamed="hamed" 
******************************************************/ 

Python код:

# used for command 
# below line is a syntax python 
# in python we dont declare variable 
list=["ali","hamed"] #python syntax 
#in python we dont wite { 
#python work with tab insteed of {} 
for i in list: 
    temp = i + ' = "' + i + '"' #temp is a string 
    exec(temp) 

Мой вопрос: Есть ли подобная функция существует в C++? Если нет, как реализовать его в C++?

+1

Нет, вы не можете сделать это на C++, это другой вид языка.Если вы хотите написать эту функцию самостоятельно, то это по сути то же самое, что писать компилятор C++ и компоновщик. Нелегкая задача. – john

+0

@ john ok не существует какой-либо другой функции, которая поможет мне? или как я могу написать этот код без использования exec –

+3

Это зависит от того, что вы хотите сделать. Вместо того, чтобы говорить, может ли C++ сделать это, или может C++ сделать это, описать проблему, которую вы хотите решить. Он будет разрешен в C++. – john

ответ

3

Питон exec, и аналогичные функции на других языках (т.е. eval в JavaScript) работают только потому, что те интерпретированы языков, где переменные определяются во время выполнения .

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

+0

@unkulunkulu да, я сделал. Страдает от плохого простуды, высыпается на псевдоэфедрин и не набирает прямо :( – Alnitak

+0

@ Alnitak этот код синтаксис python, а не C++ -i объяснить, как работает python в коде, пожалуйста, прочитайте его снова –

+0

Я его уже читал. Он работает только на Python, потому что он _interpreted language_ и команда 'exec' позволяет выполнять произвольные строки. C++ - _compiled_, так что нет. – Alnitak

2

Вы можете это сделать, но это не так, но это будет работать только в системах , где установлен компилятор C++. В принципе, C++ составляет , поэтому, если вы хотите выполнить некоторую строку, которая является C++, , вам придется ее скомпилировать: напишите ее в файл (возможно, с дополнительным шаблоном ), вызовите компилятор (с system), чтобы создать DLL, а затем загрузить DLL.

На практике, даже если вы пошли на все это, вы, вероятно, найдете это менее полезным, чем вы думаете. Поскольку C++ требует статических объявлений для почти всего, гораздо труднее написать такие небольшие фрагменты и использовать их. (Вы, например, , должны были бы обернуть его в функцию и сгенерировать extern для всех переменных, которые он использует.) C++ не поддерживает такого рода вещи для целей разработки программного обеспечения; те самые функции , которые делают языки, подобные Python, настолько гибкими для небольших, быстро написанных программ, вызывают серьезные проблемы с обслуживанием, когда используется в крупномасштабном надежном программном обеспечении. Различные языки - это , предназначенные для разных целей. Очень легко создать систему смешанного языка, использующую Python для верхнего уровня клея (где вы хотели бы создать такой объект, как вы описали), и , вызывающий на C++ для тяжелой работы (где такое средство разрешает пользователю для запуска ядровых отвалов по желанию).

Кроме того, вы можете реализовать небольшой язык на C++. Для , сохраняя определенные пользователем переменные, например, используйте std::map, вместо объявления переменных. (То есть, в конце концов, что Python делает под капотом.)

+0

@ James +1 ok -Kanze можете ли вы закодировать его для меня, пожалуйста, –

+0

@ MM-BB Откуда этот список? Если он доступен во время компиляции, я бы предложил создать желаемый C++ в качестве части процедуры сборки (используя Python!). Если нет, вы получите множество системных зависимостей; Я бы пошел на решение 'std :: map'. –

+0

@ MM-BB Но объясните, для чего вы его используете. (По моему опыту, это обычно не лучшее решение на Python. Я занимаюсь большим количеством Python, но я никогда не использовал 'exec' таким образом.) –

1

Если вы планируете использовать строки в качестве параметров, это НЕ хорошая идея! вы можете просто использовать функцию генератора id и предоставить идентификатор каждой строке, которую вы собираетесь использовать, или если вы используете класс, вы можете поместить эту функцию в конструктор. нет необходимости в том, что exec() вообще !!

Смежные вопросы