让用户在c ++中使用一个函数

时间:2010-12-04 20:05:33

标签: c++

  

可能重复:
  Dynamic source code in C++

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

7 个答案:

答案 0 :(得分:0)

用户键入的内容将是文本或字符串。我知道将它映射到函数的唯一方法是使用if / else或switch语句。那个或者令人畏缩的诱导选项,将您的每个功能映射到UI小部件。

故事的结尾,是你的代码。你必须写作,并与之共存。请注意,您的程序可能会非常成功,并且您可能不再编写代码,然后其他人将不得不维护您的代码。因此,对于可能关注您的维护程序员来说,并且编写一些不太难以理解的代码。

答案 1 :(得分:0)

我假设你想从php中获得类似eval的东西。

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

答案 2 :(得分:0)

你的意思是什么类型的功能?一个C ++函数?如果是这样,那么你将不得不(1)解释它或(2)编译并执行它。解释将是更可能的选择。我不确定那里是否有库存,但我认为有。

如果您不喜欢mega-if或大型交换机,那么您可能无论如何都可以解决任何解决方案,但是再一次,很少有一种完美的方法可以做到。考虑查看各种逻辑结构和算法,看看如何做一些通常可以通过另一种方式完成23个案例切换的工作。就像我最初所说的那样,有时你真的需要一百万个嵌套才能做你想做的事。

答案 3 :(得分:0)

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

如果你想在C ++中这样做,你需要编写自己的解释器来解析用户输入的内容。

答案 4 :(得分:0)

这是我最好的主意,但它有点内存密集。

首先,创建一个类,让我们调用它MyFuncPtr来存储几个不同类型的函数指针的联合,以及一个整数来告诉它是哪个类型。重载()运算符以调用使用可变长度参数列表存储的函数。确保包含某种运行时参数检查。

最后为MyFuncPtrs创建一个字符串映射。将您的函数及其名称存储在此映射中。然后,您需要做的就是将名称输入[]命令以获取可以轻松调用的函数。模板可能用于帮助制作MyFuncPtr实例。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果它是普通的C函数并且没有对符号执行名称修改(使用extern "C" { ... }

,这将是最简单的

使用某些特定于平台的代码,您可以通过其名称获取函数的地址。然后将地址转换为函数指针,您可以使用它来调用函数。

在Windows上,您必须在符合Posix标准的平台上使用GetProcAddress和dlsym。