如何基于字符串文字参数返回函数对象?
此参数不必是模板,但我希望能够输入字符串文字并返回函数对象
我正在寻找类似的东西:
template<const char * s> func_pointer(int arg);
我尝试返回lambda。我也尝试过返回一个类operator()和一个模板函数。没有工作。
感谢您的帮助!
编辑:用extern variable
调用函数对我来说也不起作用。
编辑:我正在编写语言解析器。我想为解析器构建框架,以避免重写大量代码。因此,我希望能够拥有一堆解析文本的函数。我希望有一个解析单个字符串文字(程序被词法化)的基本函数,并且希望能够为每个可能的基本函数传递字符串。
编辑:请注意,任何可以将lambda和函数指针转换为广义类型(例如std :: function)的函数对象都可以。
答案 0 :(得分:1)
对我来说,将字符串映射到函数的最简单方法之一是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;
}
答案 1 :(得分:0)
我一直在寻找std :: function对象(感谢@tinstaafl),这样我就可以将lambda和函数指针转换为相同类型。函数可以基于字符串文字返回lambda。