The C++ Compass
|
>FAQ<
|
Home Risorse Utilities Compilatori GUI Toolkits Libri Download FAQ Who am I |
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. |
webmaster@thecppcompass.org |