-1

Python函数exec()是一个非常好的编程工具。

例如:

/******************************************************
 * 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++ 中实现它?

4

3 回答 3

3

Pythonexec和其他语言(即evalJavaScript)中的类似功能之所以有效,是因为它们是在运行时定义变量的解释性语言。

您不能直接在 C++ 中执行您所要求的操作,因为它是一种编译语言,需要在编译时知道所有变量及其名称。

于 2013-04-09T14:01:12.223 回答
2

你可以做到,但这并不简单,而且它只适用于安装了 C++ 编译器的系统。基本上,C++ 是编译好的,所以如果你想执行一些 C++ 字符串,你必须编译它:把它写到一个文件中(可能有一些额外的样板,比如一些包含),调用编译器(with system)来构建一个DLL,然后加载 DLL。

在实践中,即使您付出了所有努力,您也可能会发现它没有您想象的那么有用。因为 C++ 几乎所有东西都需要静态声明,所以编写这样的小片段并让它们可用要困难得多。(例如,您必须将其包装在一个函数中,并生成 extern对于它使用的所有变量。)出于软件工程的原因,C++ 不支持这种事情;正是这些特性使得像 Python 这样的语言对于小型、快速编写的程序如此灵活,但在用于大规模健壮软件时会导致严重的维护问题。不同的语言是为不同的目的而设计的。使用 Python 创建一个混合语言系统非常容易,因为顶级胶水(您需要像您描述的那样的工具),并调用 C++ 来完成繁重的工作(这样的工具将允许用户触发核心转储)随意)。

或者,您可以在 C++ 中实现一种小型语言。例如,为了保留用户定义std::map的变量,请使用 ,而不是声明变量。(毕竟,这就是 Python 在幕后所做的事情。)

于 2013-04-09T14:29:46.350 回答
1

如果您打算使用字符串作为参数,这不是一个好主意!您可以简单地使用 id 生成器函数并为要使用的每个字符串提供一个 id,或者如果您正在使用一个类,您可以将该函数放入构造函数中。根本不需要那个 exec() !

于 2013-04-09T17:09:56.083 回答