Progettazione dell'API di libreria C ++

10

Sto cercando una buona risorsa per conoscere la buona progettazione dell'API per le librerie C ++, guardare oggetti condivisi / DLL ecc. Ci sono molte risorse sulla scrittura di API carine, classi, modelli e così via al livello sorgente, ma quasi nulla di mettere insieme le cose in libs condivisi e file eseguibili. Libri come il software su grande scala C ++ di John Lakos sono interessanti ma massicciamente obsoleti.

Quello che sto cercando è un consiglio, ad esempio sulla gestione dei modelli. Con i template nella mia API spesso finisco con il codice della libreria nel mio eseguibile (o in un'altra libreria), quindi se correggo un bug non posso semplicemente distribuire la nuova libreria, ma devo ricompilare e ridistribuire tutti i client di quel codice. (e sì, conosco alcune soluzioni come provare ad istanziare almeno le versioni più comuni all'interno della libreria ecc.)

Sto anche cercando altri caveat e cose da tenere in considerazione per mantenere la compatibilità binaria mentre si lavora su librerie C ++.

C'è un buon sito web o un libro su queste cose?

    
posta johannes 02.09.2012 - 15:28
fonte

2 risposte

11

In realtà c'è un libro che è esattamente ciò che cerchi. È chiamata, abbastanza appropriatamente, API Design per C ++. Il sito web del libro ha codice sorgente del libro e Errata pure.

    
risposta data 02.09.2012 - 16:16
fonte
4

Questo è praticamente impossibile. Il semplice fatto è che a volte, hai bisogno del compilatore per fare un lavoro, e non puoi semplicemente allontanare quella necessità. Non esiste una funzione che possa rendere std::vector non una libreria di sola intestazione. Il compilatore può far funzionare molte magie, ma non puoi averli senza invocarlo, e questo è un dato di fatto.

Ecco cosa puoi fare: non utilizzare modelli in cui non ti servono. Ecco cosa non puoi fare: qualsiasi altra cosa.

Il semplice fatto è che la ricompilazione con la nuova versione non è un grosso problema rispetto ai vantaggi di prestazioni, sicurezza e funzionalità che è possibile ottenere con le librerie tipizzate staticamente.

    
risposta data 02.09.2012 - 17:17
fonte

Leggi altre domande sui tag