Domanda

Quale potrebbe essere il modo migliore per iniziare a programmare usando le librerie boost lambda.

È stato utile?

Soluzione

Rimanendo all'interno dei confini del linguaggio C ++ e delle librerie, suggerirei prima di abituarmi alla programmazione usando i modelli di funzione dell'algoritmo STL, poiché uno degli usi più comuni che avrai per boost :: lambda è sostituire le classi di funzioni con espressioni incorporate inline.

La stessa documentazione della biblioteca ti fornisce un esempio iniziale di cosa serve:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

dove std::cout << _1 << ' ' produce un oggetto funzione che, quando viene chiamato, scrive il suo primo argomento nel flusso cout. Questo è qualcosa che potresti fare con una classe di funzione personalizzata, std::ostream_iterator o un ciclo esplicito, ma boost :: lambda vince in concisione e probabilmente chiarezza - almeno se sei abituato ai concetti di programmazione funzionale.

Quando (over-) usi l'STL, ti ritrovi a gravitare verso boost :: bind e boost :: lambda. È molto utile per cose come:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

Prima di arrivare a quel punto, non così tanto. Quindi usa gli algoritmi STL, scrivi i tuoi funzioni e poi traducili in espressioni incorporate usando boost :: lambda.

Da un punto di vista professionale, credo che il modo migliore per iniziare con boost :: lambda sia di capire e accettare l'uso di boost :: bind. L'uso di segnaposto in un'espressione boost :: bind sembra molto meno magico di & Quot; nudo & Quot; boost :: lambda segnaposto e trova più facile accettazione durante le revisioni del codice. Andare oltre la spinta di base: l'uso di lambda è molto probabile che ti procuri dolore dai tuoi colleghi a meno che tu non sia in un negozio C ++ all'avanguardia.

Cerca di non esagerare - ci sono ci sono momenti in cui e dove un for - loop davvero è la soluzione giusta.

Altri suggerimenti

Dipende. Sei già esperto di concetti di programmazione funzionale? In caso contrario, suggerirei di iniziare in un linguaggio progettato per la programmazione funzionale anziché in un linguaggio procedurale con funzionalità funzionali pinzate. Se non sei abituato a programmare in uno stile funzionale (non è necessariamente più difficile , ma è sicuramente diverso), allora passerai più tempo a combattere la sintassi e non abbastanza tempo a imparare a fare cose .

Per quanto riguarda da dove cominciare, ho tagliato i miei denti funzionali su Scheme, ma ci sono molte buone opzioni.

Se stai lavorando con un compilatore abbastanza recente, puoi usare boost. Se non è già sul tuo computer, installalo (sudo apt-get install libboost-dev su unbuntu, ottieni i binari da boost.org se sei su Windows). Leggi i doc , quindi guarda il tuo esistente codice per situazioni in cui è possibile utilizzarli. Hai molti duplicati di codice che potrebbero essere eliminati se, ad esempio, hai parametrizzato una funzione con un piccolo codice?

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