Ultimamente mi sono entusiasmato del supporto per lambda in VC2010. Sto lentamente iniziando a cogliere appieno il potenziale di questa funzionalità nel trasformare C++ in qualcosa di molto meglio.Piani di libreria per C++ 0x?
Ma poi ho capito che questo potenziale dipende in gran parte dal supporto del flusso principale di lambda nelle librerie quotidiane come boost e QT.
Qualcuno sa se ci sono piani per estendere queste librerie con le nuove funzionalità di C++ 0x?
lambda sostituisce praticamente la necessità di boost :: lambda e tutto ciò che è in boost che interagisce con esso. QT potrebbe aggiungere il supporto per lambda in tutta la loro contenitore e forse anche come un modo alternativo di definire SLOT
s
'boost :: obiettivi bind' un'altra cosa, non di essere sostituito da lambda. 'std :: bind' farà il suo lavoro di funzioni vincolanti. Invece, lambda sostituirà parzialmente la funzionalità in 'boost :: lambda' (e il suo successore, boost :: phoenix, afaik). Ciò che attualmente lambda non può fare è il polimorfismo di 'boost :: lambda'.La possibilità di creare funzioni che funzionano su qualsiasi tipo di argomento: '_1 ++' incrementa qualsiasi tipo di argomento, mentre '[] (int & a) {a ++; } 'può solo incrementare int. Ho sentito ora che i concetti sono fuori dal C++, i lambda polimorfi sono di nuovo un'opzione. –
@litb: è interessante, hai qualche link al materiale che spiega perché i concetti erano un ostacolo ai lambda con i parametri del tipo? –
Non conosco un documento che lo discuta in dettaglio, ma ho letto su usenet. Immagino, avrebbe dovuto esserci un modo per dire "richiede Blah [] (T t) {...}" o qualcosa del genere per rendere vincolato il modello 'operator()' di lambda. Un altro problema potrebbe essere che in un modello vincolato è possibile chiamare solo altri modelli vincolati per consentire la definizione di una definizione del modello. Quindi con un lambda che ha un semplice 'operatore()' non contenuto, non è possibile usarlo in un modello vincolato come questo: 'modello void f (T t) {([] (u) {...}) (t); } '. –