現在、マルチスレッドアプリケーション用にQtConncurrenct
を学習しています。だから私は、リスト内の整数を合計する簡単なプログラムを実施することを決定したテストの目的のために、ここでのコードは次のとおりです。クラス内でQtConcurrent :: MappedReduceを使用する
#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関数がintObjクラスにあるように、このプログラムを変更するにはどうすればよいですか?
私は本当に実用的な例を感謝します。前もって感謝します。
元のコードを削除して質問を編集しないでください...追加情報を追加する場合は、元のコードの後に追加してください - 質問が大幅に変更された場合、 。 – Holt
ええ、私は将来それを思い出します。 – Mafura