8
我觀察到Visual Studio 11 Beta中的新庫和thread()和ref()之間的行爲差異。我想知道誰是對的。如果標準偏離了Boost原始實施的標準,則可能兩者都有。 (但我不打算破譯standardese ...)在C++ 11中,您能否將ref'ed基類傳遞給線程的構造函數並獲得多態行爲?
我會用MinGW試過它...唉,AFAIK,<線程>不適用於MinGW。
因此,第一個問題是,gcc和Clang是否展示相同的編譯失敗?如果他們不這樣做,我會向VS提交一個bug。第二個問題可能是,如果編譯失敗是正確的,我的解決方法是什麼讓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;
}
clang -stdlib = libC++ -std = C++ 11編譯並打印出「derived」。你看到什麼錯誤? – 2012-03-29 14:00:15
g ++ -std = C++ 0x -lpthread也可以編譯並且儘管我沒有看到多態線程的任何直接使用,但沒有什麼壞處。 – stefaanv 2012-03-29 14:14:49
感謝您的幫助,夥計們。我會在VS上提交一個bug,希望他們能夠證實。 – screwnut 2012-03-29 18:20:51