C++ C++;功能图
我将如何调用这些函数 假设我有3个显示功能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,那么我可以得到值,但是需要打印的语句呢。像上面的那些 第一个问题的答案是在地图中
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;
}