Uvek sam se pitao kako stl::vector prihvata i pointere i obicne vrednosti i kako zna da li je pointer ili ne.
TypeTraits je mocna stvarcica :) Mogucnosti su ogromne!
NastyBoy, znas li jos neke primere gde se oni mogu koristiti?
Razmisljao sam, npr... Imamo klasu Brojevi, klasu Slova... I sada, zelimo da napravimo mehanizam za stampanje. Mozemo ih izvesti iz klase Prikaz da bi imali mogucnost da prikazujemo. Svaka klasa ce imati svoj mehanizam za prikazivanje. Tabla je objekat na kojem se prikazuju.
void Stampaj(Prikaz * p,Tabla * t)
{
p->PrikaziMe(t);
}
Brojevi su int, slova su char i svaka klasa moze sama sebe lepo da prikaze... Tabla ima mehanizam stampajInt(), stampajChar(), koje svaka klasa poziva.
A sa traits
Code:
template<class T>
Traits {};
template <>
class Traits<Brojevi>
{
public:
typedef int Type;
};
template <>
class Traits<Slova>
{
public:
typedef char Type;
};
template<class T>
void Stampaj(T * p, Table * t)
{
T::Type data = p->GetData();
t->Stampaj(data);
}
Krajnji rezultat da smo stampanje stavili u table i u odnosu na to, kakav tip podatka dobije, tabla stampa (int ili char).
Na jednom mestu imamo trazenu funkcionalnost i ako nam treba da menjamo prikaz char-ova, to mozemo uraditi na jednom mestu a ne u svim klasama gde se char-ovi prikazuju ( mada, sve vezano za prikazivanje moze stajati na jednom mestu i bez Traits - u klasi Prikaz ).
E sad... Ja vise volim design model gde klasa sama sebe iscrtava i koriscenje svih pogodnosti virtuelnih funkcija. Da li su Traits u ovom slucaju nepotrebno iskorisceni ( jos uvek sam pocetnik ) ili ovo moze biti jedan od nacina dizajniranja ovakvog programa koji moze olaksati stvari u pojedinim trenucima ( npr, dodavanje dodatnih funkcionalnosti kasnije sa manje izmena u kodu, itd?