Domanda

Ultimamente mi sono molto emozionato per il supporto per lambdas in VC2010. Sto lentamente iniziando a cogliere il pieno potenziale di questa funzionalità nel trasformare C ++ in qualcosa di molto meglio.

Ma poi ho capito che questo potenziale dipende fortemente 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?

lambdas praticamente sostituisce la necessità di boost :: lambda e di tutto ciò che interagisce con esso. QT potrebbe aggiungere il supporto per lambda in tutto il loro contenitore e forse anche come un modo alternativo di definire SLOT s

È stato utile?

Soluzione

Lambdas si adatta già molto bene alle librerie esistenti, ovunque una funzione accetti un oggetto funzione di un tipo dato da un parametro template.

Questa è una delle grandi cose su di loro - sono un classico esempio di una funzione linguistica che codifica la pratica esistente in una sintassi elegante.

Ovviamente la libreria boost lambda diventa ridondante, ma ciò significa che non richiede alcuna nuova funzionalità da aggiungere ad essa.

Altri suggerimenti

Non vedo come l'utilizzo di lambda dipenda dal supporto delle librerie. Lambdas elimina la necessità di creare molte classi solo per avvolgere diversi piccoli algoritmi e adattarsi perfettamente alle altre funzionalità di lingua / libreria (mi viene in mente std :: function ). Ovunque si usasse per passare un oggetto funzione o un puntatore a funzione, è possibile utilizzare anche lambdas.

Quindi aggiungono principalmente un'altra alternativa per utilizzare il codice e le librerie esistenti. L'unico modo in cui posso vedere che le librerie supportano meglio lambda è utilizzare approcci più funzionali.

È probabile che tali librerie aspetteranno fino a quando non ci sarà il supporto del compilatore adeguato per le funzionalità C ++ 0x pertinenti e non si preoccuperanno molto fino a quando i compilatori mainstream non lo supportano. Non trattenere il respiro.

Questo NON è vero, non puoi sostituire boost :: lambda con C ++ 0x lambda. Vedi qui per alcuni ragioni (riguardo al boost bind, ma penso che la maggior parte di esso trasferisca)

Inoltre, @daniel this potrebbe aiutarti a iniziare a utilizzare le funzioni lambda / boost bind per gli slot. Mi rende la vita incredibilmente facile.

Inoltre, @litb dalle mie fonti, lambdas non cambierà (argh)

La maggior parte delle librerie utilizza i puntatori a funzione standard per i callback. Lambda C ++ 0x può essere utilizzato come puntatore a funzione, quindi la maggior parte delle librerie non dovrebbe essere modificata. Altre librerie utilizzano modelli in modo da poter prendere qualsiasi oggetto richiamabile (ad esempio std :: foreach non dovrebbe essere modificato).

L'unica altra caratteristica C ++ 0x a cui posso pensare che le librerie possano cambiare è usare enum fortemente tipizzati. Inoltre, le librerie potrebbero iniziare a utilizzare i modelli extern per ridurre i tempi di compilazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top