View previous topic :: View next topic |
Author |
Message |
Spiros Apprentice
Joined: 11 Mar 2008 Posts: 189 Location: Zurich
|
Posted: Wed Aug 11, 2010 9:13 am Post subject: [C++] Funzione da non compilare separatamente |
|
|
Nel mio progetto C++ ho quasi solo classi template, per cui sto scrivendo una libreria header-only. L'unico "problema" è con una classe che non ha bisogno di alcun parametro di template, poiché non ha nessuna decisione da prendere a compile-time. Non vorrei dover compilare separatamente solo questa classe per quest'unica classe, anzi, in realtà per una sola funzione contenuta in questa classe: infatti, mentre le altre hanno argomenti template oppure sono davvero piccole, per cui sono inline, questa non ha argomenti template e al contempo è davvero un po' troppo grande per essere dichiarata inline. Esiste un modo attraverso il quale io possa evitare di dover compilare questa piccola parte della libreria invece di implementare il tutto nell'header e senza ricorrere a template, in questo caso inutili, o dichiarazione inline? _________________ Spiros |
|
Back to top |
|
|
Apetrini Veteran
Joined: 09 Feb 2005 Posts: 1158
|
Posted: Thu Aug 12, 2010 1:08 pm Post subject: |
|
|
Il tuo post non è chiaro. Non è chiara la distinzione di cosa cerchi di ottenere e cosa non ti va bene come soluzione. _________________ Linux ape 2.6.31-vanilla. Paludis since 0.28.0. |
|
Back to top |
|
|
Spiros Apprentice
Joined: 11 Mar 2008 Posts: 189 Location: Zurich
|
Posted: Tue Aug 17, 2010 9:24 pm Post subject: |
|
|
Apetrini wrote: | Il tuo post non è chiaro. Non è chiara la distinzione di cosa cerchi di ottenere e cosa non ti va bene come soluzione. |
Sì, in effetti... concordo. Contestualizzo un po' meglio.
Sto scrivendo una libreria C++ che permette lo scambio di dati tra programmi C++ (che usano la mia libreria) e Matlab (o altri programmi simili, come Octave) attraverso l'uso di particolari file (i file .mat). Definisco quindi nella mia libreria diverse classi, funzioni, tipi... La maggior parte di questi dipendono da argomenti template, in particolare il tipo di dato immagazzinato in matrici o vettori (double, int, complex<float>,...). Mi sono orientato quindi verso un tipo di libreria header-only, come la maggior parte delle librerie numeriche scritte in C++ che fanno uso dei template (vedi la stessa STL, Eigen, uBLAS, Blitz++,...)
Il fatto che sia una libreria header-only semplifica la vita a me che la sviluppo, a chi la usa che non deve far altro che scaricare i sorgenti e #includerli, a chi usa i programmi sviluppati con la libreria, che non deve risolvere dipendenze... Quindi questo fatto mi torna molto utile. C'è però una classe nel mio progetto che mi sta dando qualche grattacapo: si tratta di una classe non-template, che contiene in particolare un metodo che non dipende da alcun argomento template ed è eccessivamente "pesante" in termini di operazioni eseguite per poter essere dichiarata "inline" a cuor leggero. Stando così le cose, dovrei in teoria separare l'implementazione di questo metodo dall'header, compilarlo separatamente e distribuire, insieme agli header, anche la libreria binaria, statica o dinamica, contenente questo metodo compilato. Oppure, distribuire il codice sorgente, spiegando di compilare la libreria prima di usarla. Tutto ciò comporterebbe l'annullamento di tutti (o almeno alcuni) dei vantaggi citati prima.
Per evitare di dover compilare questa piccola parte della mia libreria e poter distribuire tutto il codice all'interno degli header potrei, come detto, dichiarare "inline" questo metodo oppure farlo dipendere da un argomento template. Entrambe queste soluzioni, però, sono attaubili ma non ottimali (non il template, perché non c'è alcun motivo per far dipendere il metodo da un argomento template, non l'inline, perché questo non comporterebbe di sicuro un miglioramento di prestazioni, anzi, avrebbe con ogni probabilità un effetto negativo sull'efficienza della libreria). Esistono dunque altre soluzioni?
Spero che sia più chiaro. Se non lo fosse, perdonatemi, a volte ho davvero difficoltà nello spiegare i miei problemi informatici. _________________ Spiros |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|