I'm curious - is generic programming (GP) used much in industry?
Dipende molto dal contesto del team e del progetto.
Ad esempio, nei videogiochi, spesso il codice è il più semplice possibile (e talvolta anche troppo semplice) ma in architetture di grandi dimensioni. Questo perché gli sviluppatori di giochi hanno un sacco di problemi da risolvere e non vogliono preoccuparsi della meta-programmazione (che è un linguaggio separato molto astratto e difficile da comprendere all'interno del C ++).
Allo stesso tempo, l'utilizzo di base dei modelli è comune anche in quei negozi e puoi vedere alcune ottimizzazioni basate su modelli in alcune funzioni molto specifiche di alcuni motori.
Ma in game dev, la maggior parte delle persone eviterà qualsiasi metaprogrammazione.
Ora, sull'altro lato estremo, alcune applicazioni di elaborazione davvero complesse o pesanti, che non sono comuni, richiedono una sorta di metaprogrammazione pesante a causa di requisiti di prestazioni e flessibilità (in fase di compilazione) che non sono comuni. Sto lavorando in uno proprio adesso.
Non è comune, ma esiste e alcuni domini di nicchia (in alcuni contesti embedded scientifici o basati su numeri) richiedono che le persone sappiano molto sulla metaprogrammazione o desiderano imparare.
Nel mezzo, la maggior parte delle persone usa semplicemente meta-proggramming come "client", non come "designer". La maggior parte dei codici di meta-programmazione sono raggruppati in librerie perché le librerie sono strumenti per il codice e cosa è meglio di una libreria che può adattarsi ai tipi personalizzati con cui hai lavorato fino ad ora?
Boost (http://boost.org) è un insieme di librerie, alcune delle quali sono fatte di metafora nera e sono usate in molti negozi C ++ come "STL ++", un'estensione dell'STL (e è).
Non tutti i negozi lo usano per diversi motivi, come la compatibilità con il compilatore (alcune librerie di boost possono far perdonare il compilatore ogni volta che ha ferito i tuoi sentimenti ...) e più spesso perché alcuni sviluppatori non amano non essere in grado di capire come funziona uno strumento all'interno (prova a capire Boost.Spirit ...)
Qualunque sia la società per cui lavorerai, alcuni useranno questo paradigma, alcuni lo faranno di meno o addirittura non li proibiranno.
Non c'è consenso perché nessuno ha gli stessi bisogni, contesto o squadra.
Ma ancora, ovviamente, è usato. Forse chiedi a chi usa la spinta sulla loro mailing list per avere più esempi del mondo reale?