Я пытаюсь использовать 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, чтобы он был переданным по значению, а не pass-by-reference. К сожалению, в этом случае он поставляется с огромным штрафом за производительность. Он должен будет скопировать строку и список из 64-байтных блоков данных. Количество копий сделано страшно. Мне также НЕОБХОДИМО изменить исходные элементы на карте.
Кто-нибудь имел дело с этим раньше? Любые простые исправления, о которых я не знаю?
Что такое 'parallel_for_each'? – GManNickG
Расширение Microsoft для for_each. Они - одно и то же, за исключением того, что они парализованы. Тот же эффект можно увидеть с помощью for_each. –
Хорошо, спасибо. Это должно остановить «это« параллельная_поле »вопрос. : P Если это C++ 0x, используйте '#include' и 'std :: unordered_map' как контейнер, кстати. Расширение 'hash_map' является старым и, вероятно, устарело. У вас возникают те же проблемы, если вы меняете свой контейнер на обычную карту? Ваш код выглядит хорошо для меня. Единственное, что я мог бы порекомендовать, это использовать ваш typedef; для параметра «RunMappedTests» используйте «CompleteTestList :: value_type», чтобы убедиться, что он на 100% правильный. (и 'typedef''ing' std :: list 'не может повредить.) –
GManNickG