【发布时间】:2021-11-14 07:23:59
【问题描述】:
struct Base {
virtual void squawk () {
std::cout << " I am base" << std::endl;
}
};
struct Derived : public Base {
void squawk () override {
std::cout << "I am derived" << std::endl;
}
};
int main () {
std::future<std::shared_ptr<Base>> f = std::async([](){return std::make_shared<Derived>();});
}
这会产生以下错误:
error: conversion from 'future<shared_ptr<Derived>>' to non-scalar type 'future<shared_ptr<Base>>' requested
但是,这可以编译:
std::promise<std::shared_ptr<Base>> p;
std::future<std::shared_ptr<Base>> f = p.get_future();
p.set_value(std::make_shared<Derived>());
你能解释一下为什么吗?以及创建保存多态对象的期货的推荐模式是什么?
【问题讨论】:
标签: c++ multithreading concurrency future