[英]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.