有没有办法直接从用户输入的内容调用函数?
例如:如果用户输入greet
,则调用名为greet
的函数。
我不想要生成调用的任何情况或比较。
#include <iostream>
#include<string>
using namespace std;
void nameOfTheFunction(); // prototype
int main() {
string nameOfTheFunction;
getline(cin,nameOfTheFunction); // enter the name of Function
string newString = nameOfTheFunction + "()"; // !!!
cout << newString;
// now call the function nameOfTheFunction
}
void nameOfTheFunction() {
cout << "hello";
}
是否存在在运行时生成函数的概念?
答案 0 :(得分:2)
你的意思是运行时函数生成?
没有。
但如果您已经知道用户可能将哪些字符串作为输入(即您限制输入),则可以使用地图。
对于上述内容,您可以使用std::map < std::string, boost::function <... > >
检查boost :: function HERE
答案 1 :(得分:0)
简而言之,这是不可能的。 C ++中的名称变为内存偏移量(地址),然后丢弃名称**。在运行时,C ++不知道它实际运行的函数或方法名称。
**如果编译了调试符号,那么符号就在那里,但是访问它是不切实际的。
答案 2 :(得分:0)
在运行时生成函数有很多缺点(如果可能的话),并且通常没有充分的理由在像C ++这样的语言中执行它。你应该把它留给脚本语言(比如Perl或Python),很多都提供了一个eval()
函数,它可以解释像脚本代码这样的字符串并执行它。
如果你确实需要在编译语言(例如C ++)中使用eval()
之类的东西,那么你有几个选择:
(3。)可能是最简单和最好的方法。如果你想将外部依赖关系保持在最低限度,或者如果你需要直接访问主程序中的功能和状态,我建议你应该去(2.)注意你可以在这种情况下回调你自己的代码,所以从脚本调用本机函数不是问题。 See here for a tutorial
如果您可以选择Java或C#等语言,还可以选择使用内置于运行时本身的编译器。 Have a look here for how to do this in Java