[ LUGOS-PROG ] class -> template

Goran Bervar goran.bervar at adapti.si
Thu Apr 26 09:52:06 CEST 2001


----- Original Message -----
From: "Ales Bardorfer" <alesb at robo.fe.uni-lj.si>
To: <lugos-prog at lugos.si>
Sent: Thursday, April 26, 2001 1:16 AM
Subject: [ LUGOS-PROG ] class -> template


>
> Napisal sem en class, ki sem ga zelel spremeniti v template class.
<snip>
> Obe varianti sta na dveh datotekah (matrix.h in matrix.cpp),
> mat_test.cpp pa je testni program
<snip>

Ce je to res: Prevajalnik mora videti kompletno sablono (template), ko jo
razvija za dolocen tip. Vsaka sablona se dejansko razvoje v prevajalni
enoti, kjer je definirana. Ko na primer definiras:

Matrix<double> Moja(2,2);

v mat_test.cpp, mora prevajalnik razviti sablono v funkcijo za tip double.
Prevajalnik v bistvu naredi nov razred iz sablone (od tod ime), ki dela s
tipom double. Da mu to uspe, mora med prevajanjem "videti" cisto vse, kar
sabloni priprada.  Ce bi na primer definiral se:

Matrix<int> MojaI(2,2);

bi moral prevajalnik narediti se en razred, ki bi delal z int tipom. Sablona
se pac mora razviti za vsak tip, s katerim jo uporabis. Povedano drugace,
sablona se razvije v najmanj toliko razredov, kot je uporabljenih tipov s
sablono.

Povedano bolj po domace, kompletna sablona z vsemi funkcijami vred mora biti
v header datoteki (.h), ki jo vkljucis. Standard sicer predivdeva kljucno
besedo "export",  ki naj bi omogocila definiranje teleasa funkcij v drugi
prevajalni enoti, a se nisem videl prevajalnika, ki to podpira.

goran






More information about the lugos-prog mailing list