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

标签 c++

如何根据字符串文字参数返回函数对象?

这个参数不需要是一个模板,但我希望能够输入一个字符串文字并返回一个函数对象

我正在寻找类似的东西:

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/

相关文章:

c++ - Visual Studios 2012 更改运行时库导致链接错误,使用 C++

c++ - 使用 MPI_Bcast 发送具有动态大小的动态数组

c++ - 如何编写要在 main() 获得控制权之前执行的代码?

c++ - 尝试旋转此立方体时,为什么屏幕闪烁?

c++ - 使用VS2017编译时出现无法打开文件写入错误

c++ - 用线程产生旋转效果

c++ - 需要 : C++ class for maintaining a 1-dimensional list of extents

c++ - 为什么 C++ 构建器中的 DBL_MAX 不一致?

c++ - 将 Rcpp::CharacterVector 转换为 std::string

c++ - 在 C++ 中评估多元正态/高斯密度