¿Realmente tengo que encapsular la llamada std :: move en una lambda?¿Es realmente necesario poner el std :: move dentro de un 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();
todavía soy nuevo en lambdas y referencias rvalue, por lo que inicialmente Traté:
std::transform(std::begin(srcData), std::end(srcData),
std::back_inserter(dstData), &std::move<std::wstring>);
que no funciona.
¿Debo poner el movimiento dentro de una lambda, o me falta algo obvio?
¿Qué es usted? Estoy tratando de lograr? En este caso, ¿no es suficiente usar std :: copy o std :: vector dstData (srcData.begin(), srcData.end())? –
kyku
2do eso. Además, lo que intentó hacer en la parte sin la lambda es tomar la dirección del valor de retorno de std :: move, que actúa exactamente como un temporal. Tomar la dirección de un temporal siempre es una mala idea. – Bob
@kyku El objetivo es, obviamente, * evitar * copiar las cadenas, en lugar de mover las cadenas. Dependiendo de cómo se implemente std :: string, esto puede tener una gran ventaja de rendimiento. – wolfgang