QtConcurrent :: blockingMapped()和std :: vector<>窃听器

时间:2011-07-20 11:43:10

标签: c++ qt qt4 qtconcurrent

似乎QtConcurrent适用于QT容器(QListQVector),但与STL容器失败,而不是声明in the documentation

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

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&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2825:'_ Alloc':后跟'::'时必须是类或命名空间   1 GT; 。\ main.cpp(187):参见类模板实例化'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'被编译   1 GT;同   1 GT; [   1 GT; _Alloc = INT   1 GT; ]   1&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2903:'rebind':符号既不是类模板也不是函数模板   1&gt; 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&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2238:';'之前的意外令牌   1&gt;。\ main.cpp(187):错误C2248:'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt; ::〜_Container_base_aux_alloc_real':无法访问类'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'中声明的受保护成员   1 GT;同   1 GT; [   1 GT; _Alloc = INT   1 GT; ]   1 GT; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(435):请参阅'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt; ::〜_Container_base_aux_alloc_real'的声明   1 GT;同   1 GT; [   1 GT; _Alloc = INT   1 GT; ]   1&gt;。\ main.cpp(187):错误C2440:'初始化':无法转换为'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'到'std :: vector&lt; _Ty&gt;'   1 GT;同   1 GT; [   1 GT; _Alloc = INT   1 GT; ]   1 GT;和   1 GT; [   1 GT; _Ty = INT   1 GT; ]   1 GT;没有构造函数可以采用源类型,或者构造函数重载解析是不明确的

1 个答案:

答案 0 :(得分:6)

我认为你应该明确地将容器的类型赋予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);
}

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