QtConcurrency ::使用成员函数映射

时间:2014-07-31 08:56:18

标签: c++ qt c++11 lambda qtconcurrent

如何将QtConcurrent::mapped与成员函数一起用作运算符?目前我正在使用一个可调用对象(这是一个丑陋的解决方案):

struct Vectorizer {
    Vectorizer(DialogCreateSamples* cs)
    : m_createSamples(cs) { }

    typedef QString result_type;

    QString operator()(const QString &input)
    {
        return m_createSamples->generateVector(input);
    }

    DialogCreateSamples* m_createSamples;
};
QFuture<QString> future = QtConcurrent::mapped(m_inputs,Vectorizer(this));

还尝试传递lambda表达式,但编译器说lambda中没有定义result_type。这适用于QtConcurrent::map,因为map不需要result_type。因此,如果我可以在lambda中添加typedef,它应该可以工作......

1 个答案:

答案 0 :(得分:3)

也许绑定?如果您正在使用C ++ 11或std :: tr1 :: bind或boost :: bind,则std :: bind。

类似的东西:

QtConcurrent::mapped(m_inputs, std::bind(&Class::member_function, pointerToObjectOfTypeClass /* this? */, _1 /* placeholder for argument of your function filled by data from m_inputs */));

我们在代码中使用它;例如:https://github.com/clementine-player/Clementine/blob/d03c1aa2419a0ceefd7f65114c1ac8991790b716/src/playlist/playlistbackend.cpp#L187

希望它有所帮助。