将具有不同参数的函数存储到映射中

时间:2018-09-06 14:48:06

标签: c++ function lambda std

根据当前状态,我需要使用不同的参数调用很多函数。状态以值作为函数存储到映射中。这就是我来的。它可以工作,但是我相信还有更优雅的方法。

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种不同类型的参数。保留它们中的每一个并随后删除未使用的警告会有点过码。想找到合适的解决方案。

0 个答案:

没有答案