template<typename T>
class vec3
{
public:
typename T type_t;
T x;
T y;
T z;
};
template<typename T>
struct numeric_type_traits_basic_c
{
typedef T type_t;
typedef T scalar_t;
};
template<typename T>
struct numeric_type_traits_vec3_c
{
typedef T type_t;
typedef typename T::type_t scalar_t;
};
typedef numeric_type_traits_basic_c<int> int_type_traits;
typedef numeric_type_traits_vec3_c< vec3<int> > vec3_int_type_traits;
Questo è un tipo di tratto per scalare e vettore, l'unica differenza è che il tipo scalare, per un vettore, è il tipo del suo elemento. Funziona bene.specializzazione caratteri tipo
Ma mi piacerebbe davvero essere in grado di usare lo stesso nome per quelle due classi.
template<typename T>
struct numeric_type_traits_c
{
typedef T type_t;
typedef ????? scalar_t;
};
So che questo è possibile farlo se la classe è esplicitamente specializzato per ogni tipo ho bisogno: int, float, vec3, vec3 ...
Questo è un sacco di doppioni ... Come posso mantenere la semplicità del primo bit di codice ma avere lo stesso nome di classe allo stesso tempo?
L'intenzione alla base del carattere è quella di evitare che il tipo di carattere sia supposto di fornire tali informazioni –