[ Predrag Damnjanovic @ 26.04.2003. 00:03 ] @
Tata, čitao sam onaj tvoj text o templates-ima, i zaprepastio se kad sam probao svoju template klasu da odvojim u poseban object fajl :)
Shvatio sam da se template kompajlira u main.cpp, ali me sada kopka drugo nešto.

Uzmimo na primer da hocu svoje template klasu da distribuiram kao lib.
Dakle, iskompajlira se sve, dobijem .lib fajl (ili .a kod gcc-a), i kako sad da neko koristi tu template klasu, a da ne kompajlira i template klasu, zamisli da nema sors od te template klase?
Kako je to rešeno recimo u boost biblioteci, ili u STL biblioteci?
[ Dragi Tata @ 26.04.2003. 00:20 ] @
Ukratko, ne može.

Da bi napravio klasu od šablona (specijalizaciju) moraš da imaš izvorni kod.

Sve template biblioteke (STL, Boost, pa čak i MS-ove biblioteke ATL i WTL) su distribuirane kao izvorni kod (kladim se da je Leka veliki obožavalac šablona :) )
[ Predrag Damnjanovic @ 26.04.2003. 12:41 ] @
Ajd mi onda objasni ovo:
Code:

#include <vector.h>

int main ()
{
  vector<int> v1;
}


Ovde se ukljucuje header.

Jedino ako je vector<int> ugradjen (vec iskompajliran) tip, u samu STL biblioteku?
[ filmil @ 26.04.2003. 13:38 ] @

Za koje pitanje je ovaj odgovor? :))

Biblioteke šablona moraju da dolaze u sorsu. Šablone (laički) zamišljam samo kao malko naprednije (i type checked) #define direktive. Oni su tu samo i isključivo da bi ti uštedeli kucanje.

Zato ni ne možeš da imaš kompajlirane biblioteke šablona. Sa druge strane ako napraviš vektor intova, napravio si specijalizaciju šablona, tj. popunio sve parametre hipotetičnog #define-a tako da je rezultat kod koji se može prevesti.

Dakle: ako želiš da argument šablona može da bude parametar, i da korisnik šablona može da bira njegov tip pre korišćenja, onda davanje sorsa ne možeš izbeći.

Ali ako u kodu napraviš specijalizaciju nekog šablona, dakle fiksiraš parametre, rezultujuće klase se mogu prevesti sasvim regularno kao i smestiti u biblioteku. Jedino što ćeš ti, jelte, i u tom slučaju da daš izvorni kod. :)) Open source.

f
[ Predrag Damnjanovic @ 26.04.2003. 13:46 ] @
evo sad pogledah std_vector.h, iako je header, u njemu je ceo sors :)