The C++ Compass

The C++ Compass
>FAQ<

FAQ

Home
Home

Risorse
Risorse

Utilities
Utilities

Compilatori
Compilatori

GUI Toolkits
GUI Toolkits

Libri
Libri

Download
Download

FAQ
FAQ



whoami
Who am I
[Precedente] [Indice] [Successiva]


[Template]


Come posso specializzare i template per certi tipi-parametro specifici ?

L'idioma più elegante e generale è quello dei "traits", un template che raggruppa le varie operazioni e caratteristiche di interesse. Ad esempio:

// caso-default
template <typename T>
class comparison_traits {
public:
 static inline bool equal(T t1, T t2) {
  return t1==t2;
 }
// eccetera
};

// casi speciali
template<> class comparison_traits<double> {
public:
 static inline bool equal(double t1, double t2) {
  return fabs(t1-t2) < epsilon;
 }
 // eccetera
};
// da ripetere per float, long double, ecc, o se no
// fare qualche trucchetto di eredita` per risparmiare
// di digitare qualche riga...

Dopo di che, in tutti i template, si può usare

 typedef comparison_traits<T> compare;
 // ...
 if(compare.equal(t1, t2))
  // ecc ecc

o, meglio ancora, prendere compare come un parametro con _default_ comparison_traits<T>,per potere ulteriormente "personalizzare a compile-time" l'esatto comportamento del template.




Ultimo aggiornamento : 03/07/2000

email webmaster@thecppcompass.org