QtConcurrent :: blockingMapped()和std :: vector <> bug

Fez*_*vez 2 c++ qt qt4 qtconcurrent

似乎QtConcurrent可以正常使用QT容器(QListQVector),但是使用STL容器失败了,而不是文档中声明的内容.

以下是我想在容器上使用的虚拟函数:

void addOne(int & i)
{
    ++i;
}

int addOneC(const int & i)
{
    return i+1;
}
Run Code Online (Sandbox Code Playgroud)

什么有效的例子:

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);
}
Run Code Online (Sandbox Code Playgroud)

什么工作:

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);
}
Run Code Online (Sandbox Code Playgroud)

它会导致编译错误,并且模板错误很长且模糊不清.

如果有人知道为什么,它会真的有帮助!谢谢!


错误日志:

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> 1> [1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0\VC\include\xutility(442):错误C2903:'重新绑定':符号既不是类模板也不是函数模板1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0\VC\include\xutility (442):错误C2039:'rebind':不是' 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>中声明的受保护成员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:'初始化':无法从'std :: _ Container_base_aux_alloc_real <_Alloc>'转换为'std :: vector < _Ty>'1> with 1> [1> _Alloc = int 1>] 1>和1> [1> _Ty = int 1>] 1>没有构造函数可以采用源类型,或者构造函数重载解析是不明确的

vri*_*nce 7

我认为你应该明确地给出容器的类型blockingMapped.

int main( int argc, char** argv )
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(4);
    v.push_back(3);

    std::vector<int> v1 = QtConcurrent::blockingMapped<std::vector<int> >(v, addOneC);
}
Run Code Online (Sandbox Code Playgroud)

在您给出的简单示例中编译并给出预期结果.