2016-11-03 35 views
3

std ::未來在c + +支持多態性? 那麼,如果要將child_class存儲在future<parent_class>中,我可以通過dynamic_cast<child_class>得到它嗎?std ::未來支持多態嗎?

+1

你的問題還不清楚。你問你是否聲明瞭一個'std :: function ',其中T是一個基類,然後你將一個派生類'D'放入它,你可以檢索它,'dynamic_cast'回到'D'嗎? – Olipro

+0

@Olipro sry。編輯。所以,問題是如果基類存儲派生類的std :: future,以及通過動態轉換從std :: future獲得它的值之後。 – Olzhabay

回答

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

+0

我試圖用你提供的代碼使用指針和shared_ptr,並得到分段錯誤。 T_T – Olzhabay

+0

那麼...分享改變的代碼,我們可以看到有什麼問題 – Olipro

+0

http://ideone.com/ZwY0Z2 – Olzhabay