如何根据字符串文字参数返回函数对象?
这个参数不需要是一个模板,但我希望能够输入一个字符串文字并返回一个函数对象
我正在寻找类似的东西:
template<const char * s> func_pointer(int arg);
我试过返回一个 lambda。我也试过返回一个类 operator() 和一个模板函数。没有效果。
感谢任何帮助!
编辑:使用 extern 变量
调用函数也不适用于我的目的。
编辑:我正在编写一个语言解析器。我想为解析器构建框架以避免重写大量代码。因此,我希望能够有一堆解析文本的函数。我想要一个解析单个字符串文字的基本函数(该程序是词法分析的。),并且我希望能够为每个可能的基本函数传入字符串。
编辑:请注意,任何可以将 lambda 和函数指针转换为通用类型(如 std::function)的函数对象都可以。
最佳答案
对我来说,将字符串映射到函数的最简单方法之一是 map<string, function<int(int)>
.这是一个简单的例子:
#include <string>
#include <iostream>
#include <functional>
#include <map>
int add(int a, int b){return a+b;}
int subtract(int a, int b){return a-b;}
int multiply(int a, int b){return a*b;}
int divide(int a, int b){return (b!=0?a/b: -1);}
map<string, function<int(int,int)>> functions =
{
{"add",add},
{"subtract",subtract},
{"multiply",multiply},
{"divide",divide}
};
int main(int argc, char** argv)
{
cout << functions["add"](5,2);
return 0;
}
关于c++基于模板字符串文字返回的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228535/