QtConcurrentはQTコンテナ(QList
および)では正常に動作するようですが、ドキュメントQVector
で主張されているものとは対照的に、STLコンテナでは失敗します
コンテナで使用したいダミー関数は次のとおりです。
void addOne(int & i)
{
++i;
}
int addOneC(const int & i)
{
return i+1;
}
動作する例:
int main( int argc, char** argv )
{
// Qt containers
QList<int> l;
l << 1 << 2 << 4 << 3;
QList<int> l1 = QtConcurrent::blockingMapped(l, addOneC);
QtConcurrent::blockingMap(l1, addOne);
// Standard containers
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(3);
QtConcurrent::blockingMap(v, addOne);
}
動作しないもの:
int main( int argc, char** argv )
{
// Standard containers
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(3);
vector<int> v1 = QtConcurrent::blockingMapped(v, addOneC);
}
これにより、コンパイルエラーが発生し、非常に長くてわかりにくいテンプレートエラーが発生します。
誰かが理由を知っていれば、それは本当に役に立ちます!ありがとう!
エラーログ:
1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2825:'_Alloc':'::' 1>。\mainが後に続く場合は、クラスまたは名前空間である必要があります.cpp(187):クラステンプレートのインスタンス化への参照を参照'std :: _ Container_base_aux_alloc_real<_Alloc>'コンパイル中1>with1> [1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2903:'rebind':シンボルはクラステンプレートでも関数テンプレートでもありません1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (442):エラーC2039:'再バインド':'のメンバーではありません
global namespace'' 1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(442) : error C2143: syntax error : missing ';' before '<' 1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(442) : error C2039: 'other' : is not a member of '
グローバル名前空間''1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2238:';'の前に予期しないトークンがあります 1>。\main.cpp(187):エラーC2248:'std :: _ Container_base_aux_alloc_real <_Alloc> ::〜_Container_base_aux_alloc_real':クラスで宣言された保護されたメンバーにアクセスできません' std :: _ Container_base_aux_alloc_real <_Alloc> '1> with 1> [ 1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(435):'std :: _ Container_base_aux_alloc_real <_Alloc> ::〜_Container_base_aux_alloc_real'1の宣言を参照> with 1> [1> _Alloc = int 1>]1>。\main.cpp(187):エラーC2440:'初期化中':