是否可以让用户输入一个函数,然后运行该函数而不使用大量的if或一个巨大的开关?
答案 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。