मैंने विजुअल स्टूडियो 11 बीटा और थ्रेड() और ref() के साथ बूस्ट में नई लाइब्रेरी के बीच व्यवहार में अंतर देखा है। मैं सोच रहा हूं कि कौन सही है। बूस्ट के मूल कार्यान्वयन से मानक विचलित होने पर यह दोनों हो सकता है। (लेकिन मैं मानकीकरण को समझने की कोशिश नहीं कर रहा हूं ...)सी ++ 11 में, क्या आप रीफ्रेड बेस क्लास को थ्रेड के कन्स्ट्रक्टर में पास कर सकते हैं और पॉलिमॉर्फिक व्यवहार प्राप्त कर सकते हैं?
मैं इसे मिनीजीडब्ल्यू के साथ कोशिश करूँगा ... अलास, AFAIK, < धागा > MinGW के लिए काम नहीं करता है।
तो, पहला सवाल यह है कि, जीसीसी और क्लैंग एक ही संकलन विफलता प्रदर्शित करते हैं? अगर वे नहीं करते हैं, तो मैं वीएस के खिलाफ एक बग फाइल करूंगा। दूसरा सवाल यह हो सकता है कि अगर संकलन विफलता सही है, तो बूस्ट ने मुझे क्या बढ़ावा दिया (बूस्ट का उपयोग करने में छोटा) पाने के लिए मेरा कामकाज क्या है?
और मुझे लगता है कि मेरे पास तीसरा सवाल है ... क्या मैं भी शुरू करने के लिए कोशेर कर रहा हूं?
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 संकलित और "व्युत्पन्न" प्रिंट करता है। आप क्या त्रुटि देख रहे हैं? –
g ++ -std = C++ 0x -lpthread भी संकलित करता है और घटनाक्रम मुझे पॉलिमॉर्फिक धागे के लिए कोई प्रत्यक्ष उपयोग नहीं दिखता है, इसके बारे में कुछ भी बुरा नहीं है। – stefaanv
आपकी मदद के लिए धन्यवाद, दोस्तों। मैं वीएस पर एक बग फाइल करूंगा और उम्मीद है कि वे पुष्टि करेंगे। – screwnut