2012-03-29 6 views
8

He observado una diferencia en el comportamiento entre la nueva biblioteca en Visual Studio 11 Beta y Boost con thread() y ref(). Me pregunto quién tiene razón. Podría ser tanto si el estándar se desvió de la implementación original de Boost. (Pero no voy a tratar de descifrar el estándar ...)En C++ 11, ¿se puede pasar una clase base refinada al constructor de hilos y obtener un comportamiento polimórfico?

Lo habría intentado con MinGW ... Por desgracia, AFAIK, <rosca> no funciona para MinGW.

Entonces, la primera pregunta es, ¿gcc y Clang exhiben la misma falla de compilación? Si no lo hacen, presentaré un error contra VS. La segunda pregunta podría ser, si esa falla de compilación es correcta, ¿cuál es mi solución para obtener lo que Boost me dio (a falta de seguir usando Boost)?

Y supongo que tengo una tercera pregunta ... ¿Es lo que estoy haciendo incluso kosher para empezar?

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; 
} 
+3

clang -stdlib = libC++ -std = C++ 11 compila e imprime "derivado". ¿Cuál es el error que estás viendo? –

+0

g ++ -std = C++ 0x -lpthread también compila y aunque no veo ningún uso directo para los hilos polimórficos, no tiene nada de malo. – stefaanv

+0

Gracias por su ayuda, muchachos. Archivaré un error en VS y, con suerte, confirmarán. – screwnut

Respuesta

2

me presentó un fallo para Visual Studio 11 Beta here. Sin estado todavía Editaré esta publicación con el estado cuando lo obtenga.

Edición: Solucionado en VS 2015 RTM, según la actualización en el informe de errores.

Cuestiones relacionadas