簡體   English   中英

在C ++ 11中,您可以將引用的基類傳遞給線程的構造函數並獲得多態行為嗎?

[英]In C++11, can you pass a ref'ed base class to thread's constructor and get polymorphic behavior?

我已經觀察到Visual Studio 11 Beta中的新庫與帶有thread()和ref()的Boost的行為有所不同。 我想知道誰是對的。 如果標准偏離了Boost的原始實現,可能兩者都是。 (但我不會嘗試破譯標准語言...)

我本來可以用MinGW嘗試的。。。las,AFAIK,<thread>不適用於MinGW。

那么,第一個問題是,gcc和Clang是否表現出相同的編譯失敗? 如果沒有,我將針對VS提交錯誤。 第二個問題可能是,如果編譯失敗是正確的,那么我要獲得Boost給我的東西的解決方法是什么(缺少繼續使用Boost的方法)?

而且我想我確實還有第三個問題...一開始我是在做猶太潔食嗎?

class base
{
public:
    virtual void operator()() = 0;
};

class derived : public base
{
public:
    virtual void operator()()
    {
        cout << "derived" << endl;
    }
};

int main()
{
    base *b = new derived;

    std::thread t(std::ref(*b)); // Nasty compilation errors.

    boost::thread t(boost::ref(*b)); // Works fine.

    t.join();

    return 0;
}

在這里針對Visual Studio 11 Beta提交了一個錯誤。 尚無狀態。 收到后將以狀態編輯此帖子。

編輯:根據錯誤報告中的更新,在VS 2015 RTM中已修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM