Devo davvero incapsulare la chiamata std :: move in un lambda?Sta mettendo in pratica std :: move inside a lambda?
std::list<std::wstring> srcData = GetData(); // implementation not important
std::vector<std::wstring> dstData;
dstData.reserve(srcData.size());
std::transform(std::begin(srcData), std::end(srcData), std::back_inserter(dstData),
[](std::wstring& guid) -> std::wstring { return std::move(guid); });
srcData.clear();
Sono ancora nuovo per lambda e riferimenti rvalue, quindi inizialmente ho provato:
std::transform(std::begin(srcData), std::end(srcData),
std::back_inserter(dstData), &std::move<std::wstring>);
che non funziona.
Devo mettere la mossa all'interno di una lambda o mi manca qualcosa di ovvio?
Che cosa sei stai cercando di ottenere? In questo caso non è sufficiente usare semplicemente std :: copy o std :: vector dstData (srcData.begin(), srcData.end())? –
kyku
Secondo. Inoltre, ciò che si è tentato di fare in parte, senza la lambda sta prendendo l'indirizzo del valore di ritorno di std :: mossa, che si comporta esattamente come un temporaneo. Prendere l'indirizzo di un temporaneo è sempre una cattiva idea. – Bob
@kyku Il punto è ovviamente quello di evitare di * * copiare le stringhe, invece spostando le corde. A seconda di come viene implementato std :: string, questo potrebbe avere un grande vantaggio in termini di prestazioni. – wolfgang