PDA

View Full Version : templates in VC6


71104
22-12-2005, 21:03
è normale che il compilatore non riesca a vedere l'implementazione delle funzioni membro di un template a meno che queste non siano scritte direttamente nell'header dopo la dichiarazione della classe piuttosto che in un file .cpp che include l'header?? :mbe:
perché in Visual C++ 6 accade proprio questo, e stavolta non diamo la colpa a Microsoft perché uso il compilatore Intel... :mbe:
se si tratta di un fatto standard, dov'è che posso reperire una documentazione ufficiale di questo fatto?

grazie.

cionci
23-12-2005, 17:30
E' normale, le varie implementazioni di una funzione/classe template vengono create al momento della compilazione del sorgente che le usa...

Ad esempio se hai una funzione f che ha un parametro template di tipo class e nel file che utilizza questa funzione template questa viene richiamata in questo modo:

f<int>
f<float>
f<double>

il compilatore crea tre funzioni distinte, ognuna andando a sostituire il tipo passato all'interno del codice sorgente... E' proprio per questa sostituzione che è necessario che il codice sia incluso nel .h... Chiaramente non è possibile creare le varie funzioni al momento del linking...momento in cui i due file .cpp andrebbero ad integrarsi l'un l'altro, ma devono essere già compilati...

okay
23-12-2005, 18:09
è normale che il compilatore non riesca a vedere l'implementazione delle funzioni membro di un template a meno che queste non siano scritte direttamente nell'header dopo la dichiarazione della classe piuttosto che in un file .cpp che include l'header?? :mbe:
perché in Visual C++ 6 accade proprio questo, e stavolta non diamo la colpa a Microsoft perché uso il compilatore Intel... :mbe:
se si tratta di un fatto standard, dov'è che posso reperire una documentazione ufficiale di questo fatto?

grazie.



Se non ho capito male...:
vai a questo link:
http://xoomer.virgilio.it/ramsoft/
e clicca il capitolo 28:
Capitolo 28 Linking tra moduli Assembly

Leggilo tutto... secondo me quello che vuoi fare lo puoi fare per i file com lavorando in asm con i vari tool purtroppo per gli exe non lo puoi fare... rettifico: non lo puoi fare per il semplice fatto del tool in questione che usi vc6 o cmq anche altri e simili.


ciao



28.1.1 Eseguibili in formato COM
la riga cap da trovare:
e lo stesso attributo di classe.