基于模板字符串文字返回的c ++函数指针

时间:2018-07-08 03:08:14

标签: c++

如何基于字符串文字参数返回函数对象?

此参数不必是模板,但我希望能够输入字符串文字并返回函数对象

我正在寻找类似的东西:

template<const char * s> func_pointer(int arg);

我尝试返回lambda。我也尝试过返回一个类operator()和一个模板函数。没有工作。

感谢您的帮助!

编辑:用extern variable调用函数对我来说也不起作用。

编辑:我正在编写语言解析器。我想为解析器构建框架,以避免重写大量代码。因此,我希望能够拥有一堆解析文本的函数。我希望有一个解析单个字符串文字(程序被词法化)的基本函数,并且希望能够为每个可能的基本函数传递字符串。

编辑:请注意,任何可以将lambda和函数指针转换为广义类型(例如std :: function)的函数对象都可以。

2 个答案:

答案 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。