Czy naprawdę muszę hermetyzować wywołanie std :: move w lambda?Czy umieszczenie std :: wewnątrz lambda jest naprawdę potrzebne?
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();
wciąż jestem nowy na lambdas i odniesień rvalue, więc początkowo próbowałem:
std::transform(std::begin(srcData), std::end(srcData),
std::back_inserter(dstData), &std::move<std::wstring>);
który nie działa.
Czy muszę umieścić ruch wewnątrz lambda, czy też brakuje mi czegoś oczywistego?
Co ty r próbuje osiągnąć? W tym przypadku nie wystarczy użyć std :: copy lub std :: vector dstData (srcData.begin(), srcData.end())? –
kyku
2. to. Dodatkowo, co próbujesz zrobić w części bez lambda, przyjmuje adres zwracanej wartości std :: move, która działa dokładnie tak, jak tymczasowy. Podanie adresu tymczasowego jest zawsze złym pomysłem. – Bob
@kyku Punktem jest oczywiście * unikanie * kopiowania ciągów, zamiast przesuwania ciągów. W zależności od tego, w jaki sposób implementowany jest ciąg std :: string, może to mieć dużą zaletę. – wolfgang