C++ 让用户使用c++;

C++ 让用户使用c++;,c++,C++,可能重复: 是否可以让用户键入一个函数,然后运行该函数而不使用大量的if或巨大的开关?用户键入的内容将是文本或字符串。我知道将其映射到函数的唯一方法是使用if/else或switch语句。将每个函数映射到UI小部件的选项 故事的结尾是,这是你的密码。你必须写作,并接受它。请小心,您的程序可能会非常成功,您可能不再编写代码,然后其他人将不得不维护您的代码。因此,请善待可能跟随您的维护程序员,并编写不太难理解的代码。我想您需要类似于php中的eval的东西 您可以尝试使用命令设计模式,但我怀疑这将

可能重复:


是否可以让用户键入一个函数,然后运行该函数而不使用大量的if或巨大的开关?

用户键入的内容将是文本或字符串。我知道将其映射到函数的唯一方法是使用if/else或switch语句。将每个函数映射到UI小部件的选项


故事的结尾是,这是你的密码。你必须写作,并接受它。请小心,您的程序可能会非常成功,您可能不再编写代码,然后其他人将不得不维护您的代码。因此,请善待可能跟随您的维护程序员,并编写不太难理解的代码。

我想您需要类似于php中的eval的东西


您可以尝试使用命令设计模式,但我怀疑这将是一项容易的任务。基本上你需要编写简单的C++解释器。

你是什么类型的函数?一个C++函数?如果是这样,那么您必须(1)解释它或(2)编译并执行它。在这里,口译将是更可能的选择。我不确定是否有图书馆已经在做这件事,但我假设有


如果您不喜欢mega-If或大型交换机,您可能会一直使用任何解决方案,但同样地,很少有一种完美的方法。考虑一下各种逻辑结构和算法,看看如何做一个通常是23个案例的工作可以用另一种方式来完成。就像我最初所说的,但是,有时候你真的只需要一百万个嵌套,如果你想做的事情,

< P>不,在C++中,这是不可能的。C++是一种编译语言。当程序运行时,编译器不需要是可访问的,甚至不需要安装在运行程序的机器上


如果您想在C++中这样做,您需要编写自己的解释器,解析用户输入的任何内容。p> 这是我最好的主意,但它有点内存密集

首先,创建一个类,让我们调用它MyFuncPtr来存储指向函数的几种不同类型指针的并集,并使用一个整数来判断它是哪种类型。重载()运算符以调用存储在变长参数列表中的函数。确保包含某种运行时参数检查


最后创建一个字符串到MyFuncPtrs的映射。将函数及其名称存储在此映射中。然后,您需要做的就是将名称输入到[]命令中,以获得一个易于调用的函数。模板可能用于帮助MyFrimPrTraseMease.

在程序中不可能执行任意的C++代码,因为您需要在程序中需要一个C++编译器。但是您可以尝试将Python嵌入到您的程序中。这样做相对容易。用户可以编写执行的python函数,并可以与程序的类和函数交互。您需要使您的函数对python明确可见。

如果它是纯C函数,并且没有对符号执行名称更改,那么这将是最简单的(使用
extern“C”{…}

通过一些特定于平台的代码,您可以通过函数名获得函数的地址。然后将地址强制转换为函数指针,您可以使用它调用函数


在windows上,必须在兼容Posix的平台上使用GetProcAddress和dlsym。

很难理解这意味着什么。你在寻找HTTP://CODEAD.ORG之类的工具来做C++代码原型吗?你基本上想得到代码> EVA/CODE >一些C++代码。顺便说一句,如果你一定要让这个CINT工作得很好,它是粒子物理工具根的REPL环境,我经常使用它。但是,它肯定不是一个轻量级工具……如果用户的机器上安装了编译器,并且您不关心安全问题,那么这是可能的。您可以让您的程序将用户的文本写入磁盘,调用g++(或其他)来编译它,然后运行生成的可执行文件(甚至可以将其作为DLL加载并在进程中运行)。也许是疯了,但有可能…@杰里米:我知道。然而,我不认为把这个想法灌输给一个不能区分解释语言和编译语言的人是一个好主意。我明白了。。。太糟糕了,这是一个很大的工作,但我只能接受它。