У меня есть API, который должен возвращать будущий результат (future / shared_future) клиентам. Есть случаи, когда я знаю, что могу вернуть объект «одно и то же будущее» несколько раз, потому что у меня есть связанный std :: обещание, которое может / должно доставить результат нескольким клиентам (псевдокод).
std::future<int> getVal()
{
//I have a list of promises kept
if (promiseExists)
{
//this throws an exception because get_future() can be called only one time, unfortunately
return existingPromise.get_future();
}
....
}
Проблема в том, что вы не можете вызывать get_future () несколько раз для одного и того же экземпляра или каким-либо образом получать объект shared_future из одного и того же обещания.
Для getVal есть обходной путь, чтобы вернуть shared_future (полученный из конструирования shared_future из существующегоPromise.get_future ()), но в этом случае мне нужно кэшировать объект shared_future с объектом обещания, и было бы проще просто иметь объект обещания, на котором как-то, чтобы иметь возможность возвращать будущее несколько раз различным клиентам. Есть ли способ сделать это ?
Нет.
Почему вам нужно сдержать обещание? Только поставщик результата нуждается в обещании, все потребители результата нуждаются только в (общем) будущем.
Других решений пока нет …