如何通过 std::promise 返回一个std::any
时间: 2023-07-08 21:24:32 浏览: 101
C++11中std::packaged_task的使用详解
5星 · 资源好评率100%
可以通过使用 `std::promise` 的 `set_value` 方法来设置一个值,然后使用 `std::future` 的 `get` 方法来获取该值。但是,`std::promise` 不能直接返回 `std::any` 类型的值,因为 `std::any` 是一个类型擦除容器,需要知道具体类型才能访问其值。
一种解决方法是,将 `std::any` 转换为一个已知类型,然后通过 `std::promise` 返回该类型。例如,可以将 `std::any` 转换为 `std::string`,然后通过 `std::promise<std::string>` 返回该字符串。
另一种解决方法是,将 `std::any` 封装在一个自定义的类中,该类可以提供访问 `std::any` 的方法。然后,通过 `std::promise` 返回该自定义类的实例。例如:
```c++
#include <any>
#include <future>
class MyAny {
public:
MyAny(std::any value) : value_(std::move(value)) {}
std::any getValue() { return value_; }
private:
std::any value_;
};
int main() {
std::promise<MyAny> p;
std::future<MyAny> f = p.get_future();
// set value
std::any value = 42;
MyAny myValue(value);
p.set_value(myValue);
// get value
MyAny result = f.get();
std::any resultValue = result.getValue();
return 0;
}
```
在上面的例子中,我们将 `std::any` 包装在 `MyAny` 类中,然后通过 `std::promise` 返回 `MyAny` 类的实例。在获取结果时,我们先获取 `MyAny` 类的实例,然后再通过 `getValue` 方法获取 `std::any` 类型的值。
阅读全文