Perché definizione di std :: funzione <> :: operator() nello standard C++ è:C++ 11 std :: funzione e spedizioni perfetta
R operator()(ArgTypes...) const;
e non
R operator()(ArgTypes&&...) const;
?
Si potrebbe pensare che per inoltrare correttamente i parametri, è necessario il & & e quindi utilizzare std::forward<ArgTypes>...
nel corpo della funzione quando si inoltra la chiamata?
ho parzialmente reimplementato std :: funzione per testare questo e ho scoperto che se uso il & &, ottengo "non può legarsi 'xxx' lvalue a 'xxx & &'" da g ++ quando provo poi passare parametri per valore per operatore(). Ho pensato di avere una conoscenza sufficiente dei concetti di rvalore/inoltro, ma non riesco ancora a eludere questo punto. Cosa mi manca?
Grazie, tutto ha perfettamente senso ora. – airman
@Xeo, il tuo codice viene compilato correttamente ... http://ideone.com/7TyCB8 Non c'è nessun errore in f (i), puoi spiegare cosa intendi con "// error", o forse sto usando il compilatore sbagliato Grazie. –
@WillBradley: rileggi il commento nella parte superiore di 'main': *** Assume *** che' std :: function :: operator() la firma di 'era in realtà' R (Args && ...) '- questo con, diciamo, 'function ' produce 'void (int &&)' per 'operator()', che ora accetta solo rvalues. –
Xeo