gpt4 book ai didi

c++ - 在类中使用 QtConcurrent::MappedReduce

转载 作者:行者123 更新时间:2023-11-30 05:19:13 25 4
gpt4 key购买 nike

我目前正在学习用于多线程应用程序的QtConncurrenct。因此,出于测试目的,我决定实现一个简单的程序,对列表中的整数求和,代​​码如下:

#include <QCoreApplication>
#include <QtConcurrent>
#include <functional>

class intObj{
int m_value;
public:
intObj(int val = 0):m_value(val){}

int val() const {return m_value;}

};

static intObj mapFunction(const intObj &num){
return intObj(num.val());
}

static void reduceFunction(intObj &sum, const intObj &term){
int x = sum.val();
int y = term.val();
sum = intObj(x+y);
}


class myTest{
public:
int getSum(QList<intObj> numbers);

};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<intObj> n;

for(int i = 0; i < 1000 ; i++){
n.append(intObj(i));
}

myTest m;
int sum = m.getSum(n);
return a.exec();
}


int myTest::getSum(QList<intObj> numbers){
auto sum = QtConcurrent::mappedReduced(numbers,mapFunction,reduceFunction);
return sum.result().val();
}

该程序现在可以正确运行,但是 map 和 reduce 函数在类之外。我如何修改这个程序,使 map 和 reduce 函数在类 intObj 中?

我真的很感激一个有效的例子。提前致谢。

最佳答案

您不能像那样将指向方法的指针传递给 mappedReduced

  • 如果您不需要 MapFunction 和 ReduceFunction 中的对象,您应该将这两个函数设为static:
static int mappedFunction(const int num){
return num;
}

static void reduce(int &sum, const int term){
sum += term;
}
auto sum = QtConcurrent::mappedReduced(numbers,
std::bind(&myTest::mappedFunction, this, std::placeholders::_1),
std::bind(&myTest::reduce, this, std::placeholders::_1, std::placeholders::_2));

// Or lambda if Qt support them:
auto sum = QtConcurrent::mappedReduced(numbers,
[this] (int num) { mappedFunction(num); },
[this] (int &sum, int num) { reduce(sum, num); });

你也可以使用 Function Objects并存储对当前 myTest 实例的引用。

关于c++ - 在类中使用 QtConcurrent::MappedReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41243853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com