代码之家  ›  专栏  ›  技术社区  ›  Clark Gaebel

不可能通过参考?

  •  2
  • Clark Gaebel  · 技术社区  · 15 年前

    我想用一个 for_each 循环我的代码,但我得到以下错误:

    cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
    

    这是违规代码:

    typedef stdext::hash_map<
            std::string, std::list<DefaultTestContext>
        > CompleteTestList;
    
    static void RunMappedTests(pair<string, list<DefaultTestContext>>& tests)
    {
        RunAllTestsInList(tests.second);
    }
    
    void RunTestsInParallel(CompleteTestList& testList)
    {
        for_each(testList.begin(), testList.end(), RunMappedTests);
    }
    

    当然,最简单的解决方法是将runmappedts的参数更改为按值传递,而不是按引用传递。不幸的是,在这种情况下,它会带来巨大的性能损失。它必须复制一个字符串和一个约64字节数据块的列表。复制的数量是可怕的。我还需要修改地图中的原始元素。

    以前有人处理过这个吗?有什么我不知道的简单方法吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   MSN    15 年前

    std::map<T1, T2>::value_type std::pair<const T1, T2> . 更改的参数 RunMappedTests pair<const string, list<DefaultTestContext>> & .