通过参考不可能?

时间:2010-02-14 20:10:19

标签: c++ visual-studio-2010

我正在尝试在代码中使用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);
}

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

之前有人处理过此事吗?我不知道的任何简单修复?

1 个答案:

答案 0 :(得分:3)

std::map<T1, T2>::value_typestd::pair<const T1, T2>。将RunMappedTests的参数更改为pair<const string, list<DefaultTestContext>> &