Соответствующий стандарту явный захват по значению в лямбда-выражении?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Соответствующий стандарту явный захват по значению в лямбда-выражении?

Сообщение Anonymous »

У меня есть фабричная функция, которая возвращает объект, обрабатывающий фоновое задание. Поскольку это устаревший код, внести изменения в проект сложно. Фабричные функции возвращают этому объекту std::weak_ptr, срок действия которого истекает после завершения задания, но разрешает некоторый контроль (например, отмену или ожидание завершения задания), пока задание все еще выполняется. Выглядит это так (минимальный компилируемый пример):

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std::chrono_literals;

class Job {
public:
~Job() {
// exposition only
std::cout WaitFinished();
}
}
static void Abort(std::weak_ptr job)
{
std::shared_ptr locked_job = job.lock();
if (locked_job != nullptr)
{
locked_job->CancelSync();
}
}

private:
std::atomic cancel_flag = false;
std::thread bg_thread;
};

int main(void)
{
auto job = Job::Create();
std::this_thread::sleep_for(350ms);
Job::Abort(job);
}
Смотрите это в Compiler Explorer
Мой ключевой момент — метод Create, в котором существенно, чтобыshared_ptr фиксировался по значению, но стандарт C++ явно указывает, что список захвата, такой как [=job], является неправильно сформированным, поскольку явный захват по значению избыточен для по умолчанию захват по значению. Существует ли совместимый способ четко документировать значение job в коде C++ (не в комментариях)?

Подробнее здесь: https://stackoverflow.com/questions/797 ... expression
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»