std::future是否支持多态性?

3

c++中的std::future是否支持多态?

假如我要将child_class存储在future<parent_class>中,那么我可以通过dynamic_cast<child_class>来获取它吗?


1
你的问题不太清楚。你是在问如果你声明了一个 std::function<T>,其中 T 是一个基类,然后你将一个派生类 D 放入其中,你能否检索它并使用 dynamic_cast 转换回 D - Olipro
@Olipro 抱歉,我编辑了一下。问题是如果基类的std::future存储派生类,然后通过dynamic_cast从std::future获取它的值。 - Olzhabay
1个回答

3
如果您使用引用或指针(这很明显,否则编译会失败)……是的。
#include <iostream>
#include <future>
using namespace std;
struct Parent {
    virtual void a() { cout << "I am parent"; }
};
struct Child : Parent {
    virtual void a() { cout << "I am child"; }
};

Child g_c; //just some global for the purposes of the example

int main() {
    std::future<Parent&> p = async(launch::async, []() -> Parent& { return g_c; });
    auto c = dynamic_cast<Child&>(p.get());
    c.a();
    return 0;
}

以下是代码的结果:http://ideone.com/4Qmjvc


我尝试使用指针和shared_ptr与您提供的代码,但是出现了分段错误。T_T - Olzhabay
那么...分享修改后的代码,我们可以看看哪里出了问题。 - Olipro
好的,这两个都是完全无用的,因为你创建了shared_ptr/指针,但实际上从未将有效对象放入其中。如果你真的这样做了,它就可以正常工作:http://ideone.com/mtbrCE - Olipro
哦..我的巨大失误。我忘记初始化了。非常感谢你。 - Olzhabay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接