Zauważyłem różnicę w zachowaniu między nową biblioteką w Visual Studio 11 Beta i Boost z thread() i ref(). Zastanawiam się, kto ma rację. Mogłoby to być zarówno, gdyby standard odstąpił od pierwotnej implementacji Boosta. (Ale nie mam zamiaru próbować odszyfrować standardowego ...)Czy w C++ 11 możesz przekazać odwołaną klasę podstawową do konstruktora wątku i uzyskać polimorficzne zachowanie?
Próbowałbym tego z MinGW ... Niestety, AFAIK, < wątek > nie działa dla MinGW.
Pierwsze pytanie brzmi: czy gcc i Clang wykazują taką samą awarię kompilacji? Jeśli tego nie zrobię, zgłoszę błąd przeciwko VS. Drugie pytanie może być, jeśli błąd kompilacji jest poprawny, jaki jest mój sposób obejścia tego, co dostałem od Boost (w skrócie do korzystania z Boost)?
I przypuszczam, że mam trzecie pytanie ... Czy to, co robię, jest koszerne?
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 kompiluje i wypisuje "pochodne". Jaki błąd widzisz? –
g ++ -std = C++ 0x -lpthread również kompiluje i mimo że nie widzę żadnego bezpośredniego użycia dla polimorficznych wątków, nie ma w tym nic złego. – stefaanv
Dzięki za pomoc, chłopaki. Złożę błąd na VS i, mam nadzieję, potwierdzą. – screwnut