gpt4 book ai didi

C++ Qt QtConcurrent::filteredReduced 从 std::shared_ptr 的 QVector

转载 作者:行者123 更新时间:2023-11-28 04:35:36 24 4
gpt4 key购买 nike

我的 class Person 有一个 vectorshared_ptrs,它看起来像:

QVector <std::shared_ptr<const Person>> vecOfPeople;

Person 的字段之一是 age,我想用 QtConcurrent::filteredReduced 计算例如有多少人超过 50 和我发现很难理解如何去做。我有一个 bool 返回函数 isOver50 作为:

bool isOver50(std::shared_ptr<const Person> &person)
{
return person->getAge() > 50;
}

如果我理解得好,应该还有一个reduction 函数,在我的代码中它看起来像:

void reduction(int &result, std::shared_ptr<const Person> &person)
{
result++;
}

最后,使用 filteredReduced 编码为:

QFuture<int> futureOver50 = QtConcurrent::filteredReduced(vecOfPeople, isOver50, reduction);

futureOver50.waitForFinished();

qDebug() << futureOver50.result();

这不会编译,我敢打赌 reduction 函数有问题,但我不知道它是什么。

最佳答案

来自Qt documentation :

The filter function must be of the form:

bool function(const T &t);

The reduce function must be of the form:

V function(T &result, const U &intermediate)

您的 shared_ptr 参数是非常量引用(即使指向的类型是常量),Qt 想要传递常量引用,导致编译错误。

相反,请考虑使用

bool isOver50(const std::shared_ptr<const Person> &person);
void reduction(int &result, const std::shared_ptr<const Person> &person);

以后,请尝试将实际的错误消息与您的问题一起提交,这样可以更快地诊断这些问题

关于C++ Qt QtConcurrent::filteredReduced 从 std::shared_ptr 的 QVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51557354/

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