【发布时间】:2021-01-26 17:53:46
【问题描述】:
我正在构建一个 C++ 程序,它使用 API 来尝试获取有关包裹跟踪信息的一些数据,其中一些方法正在返回期货,如果未来实现,我想将其返回到主程序。考虑以下几点:
std::future<ApiClass> myMethodReturningFuture() {
/* some processing */
std::future<ApiClass> future = api.call();
return future;
}
我的问题是如何正确处理未来(例如,检查它是否包含正确的信息,调用 future.valid() 似乎总是返回 1)。此外,如果未来不完全有效,如何从此函数返回 NULL 或 nullptr ?让我们考虑一下这种情况:
std::future<ApiClass> myMethodReturningFuture() {
/* some processing */
try {
std::future<ApiClass> future = api.call();
return future;
} catch (std::exception& e) {
return nullptr // or NULL;
}
}
上面的 sn-p 不能编译。即使我创建一个函数来返回一个指针,我也会收到关于“使用已删除函数 std::future”的错误。像这样的:
std::future<ApiClass>* myMethodReturningFuture() {
/* some processing */
try {
std::future<ApiClass>* future = &api.call();
return future;
} catch (std::exception& e) {
return nullptr // or NULL;
}
}
【问题讨论】:
-
std::future::valid()应该从默认构造的未来std::future<ApiClass>();返回false。您可以退回其中之一。 -
如果未来不完全有效是什么意思?如果没有很好的方法来处理此方法中引发的异常,您可能应该在调用链的更高位置捕获它。
标签: c++ api asynchronous promise future