У меня есть параметр (в данном случае std :: vector), который мне нужно передать асинхронному методу (желательно перемещением) и лямбда-функции обратного вызова. Гарантирует ли приведенный ниже подход, что лямбда будет инициализирована первой (подразумевая копирование вектора), чтобы я мог переместить вектор в метод async?
Method(std::vector<std::string> vec)
{
AsyncMethod(std::move(vec), [vec]()
{
// act on vec
});
}
Порядок оценки параметра функции не указан, поэтому вы не можете полагаться на свое предположение. Решение было бы следующее.
Method(std::vector<std::string> vec)
{
auto l = [vec]() { /* Act on vec... */ };
AsyncMethod(std::move(vec), l);
}
В зависимости от сигнатуры AsyncMethod
вы можете даже захотеть передать лямбду как std::move(l)
. Это снова будет безопасно, так как вектор был заранее скопирован в замыкание.
да, это то, чем я занимаюсь сейчас. Хотя это не большая проблема. Просто хотел, чтобы процесс чтения был более естественным. Спасибо
Поскольку вы не описали, чего пытаетесь достичь; Не забывайте,
vec
для вашего AsyncMethod иvec
для вашего лямбда - это два разных вектора, поэтому изменение значений в одном не влияет на другое ...