C++ C++;功能图

C++ C++;功能图,c++,dictionary,C++,Dictionary,我将如何调用这些函数 假设我有3个显示功能 void disp1() { std::cout<<"\n Disp1 "; } void disp2() { std::cout<<"\n Disp2 "; } void disp3() { std::cout<<"\n Disp3 "; } 应该运行disp1函数。我将如何处理这件事 如果函数的返回类型不是void,那么我可以得到值,但是需要打印的语句呢。像上面的那些 第一个问题的答案是在地图中

我将如何调用这些函数

假设我有3个显示功能

void disp1()
{
  std::cout<<"\n Disp1 ";
}

void disp2()
{
  std::cout<<"\n Disp2 ";
}

void disp3()
{
  std::cout<<"\n Disp3 ";
}
应该运行disp1函数。我将如何处理这件事


如果函数的返回类型不是void,那么我可以得到值,但是需要打印的语句呢。像上面的那些

第一个问题的答案是在地图中使用

    std::map<std::string, std::function<void>> fMap {
        {"d1", disp1},
        {"d2", disp2},
        {"d3", disp3}
    };
std::map fMap{
{“d1”,disp1},
{“d2”,disp2},
{“d3”,disp3}
};

关于返回值的第二个问题我需要考虑。

第一个问题的答案是在地图中使用

    std::map<std::string, std::function<void>> fMap {
        {"d1", disp1},
        {"d2", disp2},
        {"d3", disp3}
    };
std::map fMap{
{“d1”,disp1},
{“d2”,disp2},
{“d3”,disp3}
};
关于返回值的第二个问题,我需要考虑。

您可以使用和:

#包括
#包括
#包括
#包括
void disp1()
{
std::cout您可以使用和执行此操作:

#包括
#包括
#包括
#包括
void disp1()
{

STD::CUT< P>存储查找索引,您将使用<代码> STD::MAP< /COD>。这包括键值对(<代码> MYMAP[KEY] = Value/Cuff>)。C++允许您存储一个函数的指针,这里我使用<代码>使用< /Cord>关键字创建一个类型名称,函数,我们的函数将有指纹类型:<代码>空隙(*)(空隙)< /代码>(这就是“指向函数的指针,该函数取void并返回void”)

#包括
#包括
#包括
//我们打算映射的功能
void disp1()
{

STD::CUT< P>存储查找索引,您将使用<代码> STD::MAP< /COD>。这包括键值对(<代码> MYMAP[KEY] = Value/Cuff>)。C++允许您存储一个函数的指针,这里我使用<代码>使用< /Cord>关键字创建一个类型名称,函数,我们的函数将有指纹类型:<代码>空隙(*)(空隙)< /代码>(这就是“指向函数的指针,该函数取void并返回void”)

#包括
#包括
#包括
//我们打算映射的功能
void disp1()
{

std::cout在@Galik的评论帮助下解决

   #include <iostream>
#include <functional>
#include <algorithm>
#include <map>



typedef std::function<void()> func_t;
typedef std::map<std::string, func_t> func_t_map;

void disp1()
{
    std::cout<<"\n Display 1 "<<std::endl;
    return;
}


void disp2()
{
    std::cout<<"\n Display 2 "<<std::endl;
    return;
}

void disp3()
{
    std::cout<<"\n Display 3 "<<std::endl;
    return;
}

void disp4()
{
    std::cout<<"\n Display 4 "<<std::endl;
    return;
}



int main()
{
    func_t_map fMap;


    fMap["d1"] = disp1;
    fMap["d2"] = disp2;
    fMap["d3"] = disp3;
    fMap["d4"] = disp4;

    fMap["d2"]();

    return 0;
}
#包括
#包括
#包括
#包括
typedef std::函数函数函数;
typedef std::映射函数映射;
void disp1()
{

std::cout在@Galik的评论帮助下解决

   #include <iostream>
#include <functional>
#include <algorithm>
#include <map>



typedef std::function<void()> func_t;
typedef std::map<std::string, func_t> func_t_map;

void disp1()
{
    std::cout<<"\n Display 1 "<<std::endl;
    return;
}


void disp2()
{
    std::cout<<"\n Display 2 "<<std::endl;
    return;
}

void disp3()
{
    std::cout<<"\n Display 3 "<<std::endl;
    return;
}

void disp4()
{
    std::cout<<"\n Display 4 "<<std::endl;
    return;
}



int main()
{
    func_t_map fMap;


    fMap["d1"] = disp1;
    fMap["d2"] = disp2;
    fMap["d3"] = disp3;
    fMap["d4"] = disp4;

    fMap["d2"]();

    return 0;
}
#包括
#包括
#包括
#包括
typedef std::函数函数函数;
typedef std::映射函数映射;
void disp1()
{

std::你听说过std::map吗?我听说过。但是我不能调用具有无效返回类型的函数。对不起,我想我想在答案中发布它,我没有看到。不,你想编辑你的问题;但是我们已经知道问题出在哪里,所以没有必要。你听说过std::map吗?我听说过。但是我不能调用Function有无效返回类型的ns。抱歉,我想我想在答案中发布它,但我没有看到。不,你想编辑你的问题;但我们已经知道问题出在哪里,所以没有必要。谢谢Galik。我实际上忘记在代码中使用()了。ThanksI正在使用fMap[“d1]并期待输出。谢谢Galik。我实际上忘记了使用()在我的代码中,ThanksI使用的是fMap[“d1]我们可以使用boost::bind吗?上面提到的方法:使用std::maps是否会产生开销?比如,如果我需要映射10个函数,比如说使用maps与switch或其他方法进行比较,那会有多好。你可能可以使用
boost::bind
,我没有使用boost。你也可以使用
std::function
。使用std::maps有一些开销,但是如果您有10个函数,它将与if/else链(一个{key,value}的平面数组)进行比较,并且您不能在switch语句中使用字符串作为键。我们可以使用boost::bind吗。上面提到的方法:使用std::maps是否有开销。比如说,如果我需要映射10个函数,与switch或if else相比,使用maps映射会有多好。您可能可以使用
boost::bind
,我没有使用boost。您还可以使用
std::function
。使用std::maps会有一些开销,但如果有10个函数,它将与if/else链、平面数组{key,value}进行比较,并且不能在switch语句中使用字符串作为键。
   #include <iostream>
#include <functional>
#include <algorithm>
#include <map>



typedef std::function<void()> func_t;
typedef std::map<std::string, func_t> func_t_map;

void disp1()
{
    std::cout<<"\n Display 1 "<<std::endl;
    return;
}


void disp2()
{
    std::cout<<"\n Display 2 "<<std::endl;
    return;
}

void disp3()
{
    std::cout<<"\n Display 3 "<<std::endl;
    return;
}

void disp4()
{
    std::cout<<"\n Display 4 "<<std::endl;
    return;
}



int main()
{
    func_t_map fMap;


    fMap["d1"] = disp1;
    fMap["d2"] = disp2;
    fMap["d3"] = disp3;
    fMap["d4"] = disp4;

    fMap["d2"]();

    return 0;
}