C++ 如何创建查找表

C++ 如何创建查找表,c++,class,lookup-tables,C++,Class,Lookup Tables,基本上,我只意识到我编写项目的方式需要实现某种形式的查找表,现在我以前从未这样做过,因此不知道如何做,谷歌也没有给出明确的指示 我需要查找表,以便用户可以在命令行中输入函数,然后将参数传递给该函数,但不知道从何处开始我不知道您的具体要求,但我可以想象这样的情况: 你可能想调查一下。您可以创建自己的结构,其中包含: 函数名 指向该函数的指针 变量的向量(例如,从或写你的)来保存参数 验证函数以查看参数和函数指针是否匹配 为用户可以调用的每个函数创建此结构的实例。向用户显示这些内容,并让用户选择。在

基本上,我只意识到我编写项目的方式需要实现某种形式的查找表,现在我以前从未这样做过,因此不知道如何做,谷歌也没有给出明确的指示


我需要查找表,以便用户可以在命令行中输入函数,然后将参数传递给该函数,但不知道从何处开始我不知道您的具体要求,但我可以想象这样的情况:

你可能想调查一下。您可以创建自己的结构,其中包含:

  • 函数名
  • 指向该函数的指针
  • 变量的向量(例如,从或写你的)来保存参数
  • 验证函数以查看参数和函数指针是否匹配

  • 为用户可以调用的每个函数创建此结构的实例。向用户显示这些内容,并让用户选择。在第二步中,让他输入参数值。

    我不知道您的具体要求,但我可以想象这样的情况:

    你可能想调查一下。您可以创建自己的结构,其中包含:

  • 函数名
  • 指向该函数的指针
  • 变量的向量(例如,从或写你的)来保存参数
  • 验证函数以查看参数和函数指针是否匹配

  • 为用户可以调用的每个函数创建此结构的实例。向用户显示这些内容,并让用户选择。在第二步中,让他输入参数值。

    您可以这样做,以创建查找(分派)表:

    (注意:这是如何实现一个调度表,它是C和C++的可比性。在C++中,有其他方法,也可能更简单,不需要重新创建轮子,比如使用一些容器等)。

    #包括
    使用名称空间std;
    //数组从0开始。
    //这是用来编写代码的
    //可读性原因。
    #定义案例(X)X-1
    typedef void(*chooseCase)();
    //用于执行每个案例的函数。
    //在这里,我只是在打印
    //不同的字符串。
    无效案例1(){
    
    cout您可以这样做以创建查找(分派)表:

    (注意:这是如何实现一个调度表,它是C和C++的可比性。在C++中,有其他方法,也可能更简单,不需要重新创建轮子,比如使用一些容器等)。

    #包括
    使用名称空间std;
    //数组从0开始。
    //这是用来编写代码的
    //可读性原因。
    #定义案例(X)X-1
    typedef void(*chooseCase)();
    //用于执行每个案例的函数。
    //在这里,我只是在打印
    //不同的字符串。
    无效案例1(){
    
    cout您可以使用
    std::map
    其中
    functype
    typedef
    'd函数指针,甚至是
    boost::function
    类型

    std::map<std::string, functype> funcs;
    
    void call_user_func(const std::string &user_input, const std::string &arg1, const std::string & arg2)
    {
        functype f = funcs.at(user_input);
        f(arg1, arg2);   
    }
    
    std::map funcs;
    无效调用用户函数(常量std::string和用户输入,常量std::string和arg1,常量std::string和arg2)
    {
    functype f=funcs.at(用户输入);
    f(arg1,arg2);
    }
    
    您可以使用
    std::map
    其中
    functype
    typedef
    'd函数指针,甚至是
    boost::function
    类型

    std::map<std::string, functype> funcs;
    
    void call_user_func(const std::string &user_input, const std::string &arg1, const std::string & arg2)
    {
        functype f = funcs.at(user_input);
        f(arg1, arg2);   
    }
    
    std::map funcs;
    无效调用用户函数(常量std::string和用户输入,常量std::string和arg1,常量std::string和arg2)
    {
    functype f=funcs.at(用户输入);
    f(arg1,arg2);
    }
    
    我给你举了一个关于Arduino的例子,这个例子几乎与C/C++代码相似

    float cosLUT[(int) (360.0 * 1 / 0.5)] ;
    const float DEG2RAD = 180 / PI ;
    const float cosinePrecision = 0.5;
    const int cosinePeriod = (int) (360.0 * 1 / cosinePrecision);
    void setup()
    {
    initCosineLUT();
    }
    void loop()
    {
    // nothing for now!
    }
    void initCosineLUT(){
    for (int i = 0 ; i < cosinePeriod ; i++)
    {
    cosLUT[i] = (float) cos(i * DEG2RAD * cosinePrecision);
    }
    }
    
    float cosLUT[(int)(360.0*1/0.5)];
    恒浮点数DEG2RAD=180/PI;
    常数浮点余弦精度=0.5;
    常数int余弦=(int)(360.0*1/余弦精度);
    无效设置()
    {
    initCosineLUT();
    }
    void循环()
    {
    //现在没有!
    }
    void initCosineLUT(){
    对于(int i=0;i<余弦周期;i++)
    {
    cosLUT[i]=(浮点)cos(i*DEG2RAD*cosneprecision);
    }
    }
    
    查找表是编程领域中最强大的技巧之一。 它们是包含预先计算的值的数组,因此取代了繁重的运行时数据 通过更简单的数组索引操作进行计算 通过读取来自一系列距离的距离来跟踪某物的位置 传感器。你需要进行三角运算,可能还有功率计算。 因为它们会耗费处理器的时间,所以它会更智能、更安全 使用数组内容读取而不是那些计算更便宜。这是通常的做法
    关于查找表的使用说明。

    我给您介绍了Arduino上的示例,该示例几乎与C/C++代码相似

    float cosLUT[(int) (360.0 * 1 / 0.5)] ;
    const float DEG2RAD = 180 / PI ;
    const float cosinePrecision = 0.5;
    const int cosinePeriod = (int) (360.0 * 1 / cosinePrecision);
    void setup()
    {
    initCosineLUT();
    }
    void loop()
    {
    // nothing for now!
    }
    void initCosineLUT(){
    for (int i = 0 ; i < cosinePeriod ; i++)
    {
    cosLUT[i] = (float) cos(i * DEG2RAD * cosinePrecision);
    }
    }
    
    float cosLUT[(int)(360.0*1/0.5)];
    恒浮点数DEG2RAD=180/PI;
    常数浮点余弦精度=0.5;
    常数int余弦=(int)(360.0*1/余弦精度);
    无效设置()
    {
    initCosineLUT();
    }
    void循环()
    {
    //现在没有!
    }
    void initCosineLUT(){
    对于(int i=0;i<余弦周期;i++)
    {
    cosLUT[i]=(浮点)cos(i*DEG2RAD*cosneprecision);
    }
    }
    
    查找表是编程领域中最强大的技巧之一。 它们是包含预先计算的值的数组,因此取代了繁重的运行时数据 通过更简单的数组索引操作进行计算 通过读取来自一系列距离的距离来跟踪某物的位置 传感器。你需要进行三角运算,可能还有功率计算。 因为它们会耗费处理器的时间,所以它会更智能、更安全 使用数组内容读取而不是那些计算更便宜。这是通常的做法
    使用查找表的例子。

    因为你使用C++,我希望在那里可以直接使用一些容器类型。可能的话,你可以定义你自己的结构,包含查找关键字的空间,以及键所代表的任何内容;创建一个这种结构类型的数组,并填充ARR。然后,当您读入输入时,您就可以使用它的键/值映射