Хранить функцию с разными аргументами в карте - PullRequest
0 голосов
/ 06 сентября 2018

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

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

...