根据当前状态,我需要使用不同的参数调用很多函数。状态以值作为函数存储到映射中。这就是我来的。它可以工作,但是我相信还有更优雅的方法。
QMap<int, std::function<void(int, int, int, QString)>> map;
void run(){
populateMap();
auto f = map.value(0);
f(1,2,3, "str3");
auto fb = map.value(1);
fb(1,2,3, "str3");
}
void show(){
qDebug()<<Q_FUNC_INFO;
}
void showB(int A, int B, QString str){
qDebug()<<Q_FUNC_INFO<<"A"<<A<<B<<str;
}
void populateMap(){
std::function<void(int, int, int, QString)>fshow = [=](int a, int b, int c, QString str) -> void{
this->show();
};
std::function<void(int, int, int, QString)>fshowB = [=](int a, int b, int c, QString str) -> void{
this->showB(a, b, str);
};
map.insert(0, fshow);
map.insert(1, fshowB);
}
实际上,我有5或6种不同类型的参数。保留它们中的每一个并随后删除未使用的警告会有点过码。想找到合适的解决方案。