Übergabe von Objektreferenzargumenten an Thread-Funktionen: Überwindung von Kompilierungsfehlern
Übergabe von Referenzen an C 11-Standardbibliotheksobjekte wie std::ostream Bei Thread-Funktionen kann es zu Kompilierungsproblemen kommen. Dies liegt daran, dass Threads standardmäßig ihre Argumente kopieren.
Um eine Referenz explizit zu übergeben, umschließen Sie sie mit std::ref oder std::cref für konstante Referenzen. Hier ist eine modifizierte Version des bereitgestellten Beispiels:
void foo(std::ostream &os) { // Do something with os os << "This should be printed to os" << std::endl; } int main() { std::thread t(foo, std::ref(std::cout)); t.join(); // Wait for the thread to complete return 0; }
Durch die Verwendung von std::ref erstellen Sie einen Referenz-Wrapper, der sich wie ein Wertsemantikobjekt verhält. Mehrere Kopien des Wrappers verweisen auf dieselbe zugrunde liegende Referenz, sodass der Thread korrekt auf das std::ostream-Objekt zugreifen kann.
Denken Sie daran, sicherzustellen, dass das Objekt, auf das verwiesen wird, während der gesamten Lebensdauer des Threads gültig bleibt.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Referenzen auf C-Standardbibliotheksobjekte an Threads ohne Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!