Мне нужно вызывать множество функций с разными аргументами, в зависимости от текущего состояния. Состояние сохраняется в карте с функцией в качестве значения. Вот к чему я пришел. Это работает, но я считаю, что есть более элегантный способ сделать это.
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 различных типов аргументов. Хранение каждого из них и последующее удаление неиспользованных предупреждений немного перегружено. Хотел бы найти подходящее решение.