Ho riscontrato un problema utilizzando la nuova interfaccia C++ 11 std::thread
.
Non riesco a capire come passare un riferimento a std::ostream
alla funzione che verrà eseguita dal thread.Perché gli argomenti di riferimento dell'oggetto di passaggio alla funzione di thread non riescono a compilare?
Ecco un esempio con passando un intero (compilare e lavorare come previsto sotto gcc 4.6):
void foo(int &i) {
/** do something with i **/
std::cout << i << std::endl;
}
int k = 10;
std::thread t(foo, k);
ma quando provo il superamento di un ostream non si compila:
void foo(std::ostream &os) {
/** do something with os **/
os << "This should be printed to os" << std::endl;
}
std::thread t(foo, std::cout);
C'è un modo per fare proprio questo, o non è affatto possibile ??
NB: dal errore di compilazione che sembra provenire da un costruttore cancellato ...
Per le primitive: http://stackoverflow.com/questions/5116756/difference-between-pointer-and-reference-as-thread-parameter –