VC++11 std::thread Fehler?
-
Davon erinnere ich mich gelesen zu haben. *Buch rauskram*
-
Du kopierst das Objekt, das ist nachher einfach kein Derived mehr. Ändere zu
std::thread Thr(std::ref(*Instance));
-
Sorry war etwas zu vc lästig..
-
-
probier mal:
std::thread Thr(std::ref(*Instance) );Funktioniert bei mir.
EDIT: Da war cooky451 schneller

-
Solche realen Fälle sind gut für die Aufnahme in die FAQ!
Habe nämlich bisher nie den Sinn für std::ref gesehen, trotz Literatur. Aber dieses Topic hat mein Wissen bereichert.

-
Artchi schrieb:
Solche realen Fälle sind gut für die Aufnahme in die FAQ!
Habe nämlich bisher nie den Sinn für std::ref gesehen, trotz Literatur. Aber dieses Topic hat mein Wissen bereichert.

Ich mag std::ref hier deshalb nicht, weil es so zu leicht ist falschen Code zu schreiben. Denn ein functor ist immer trivial kopierbar - wenn man jetzt hier einen functor hat der anders ist, dann ist es viel zu leicht den doch irgendwo zu kopieren und bämm -> fehlerhafter Code.
-
Artchi schrieb:
Solche realen Fälle sind gut für die Aufnahme in die FAQ!
Habe nämlich bisher nie den Sinn für std::ref gesehen, trotz Literatur. Aber dieses Topic hat mein Wissen bereichert.

Man braucht es auch hier:
std::uniform_real_distribution<double> dist(-200, 200); auto gen = std::bind(dist, Engine::random_number_engine); std::generate(values.begin(), values.end(), std::ref(gen) )Sonst wird jedes mal die selbe Folge von Zufallszahlen generiert
-
Shade Of Mine schrieb:
Ich mag std::ref hier deshalb nicht, weil es so zu leicht ist falschen Code zu schreiben. Denn ein functor ist immer trivial kopierbar - wenn man jetzt hier einen functor hat der anders ist, dann ist es viel zu leicht den doch irgendwo zu kopieren und bämm -> fehlerhafter Code.
std::thread Thr([=]{(*Instance)();});geht auch (glaub'ich)

-
Geht auch mit static_cast, aber man sollte sich bewusst sein, dass das eine völlig andere Bedeutung hat. (Einmal hat man eine Referenz, und einmal wird kopiert.)