2011-04-02 18 views

Respuesta

14
template <typename T> 
struct pointer_depth_impl 
{ 
    enum { value = 0 }; 
}; 

template <typename T> 
struct pointer_depth_impl<T* const volatile> 
{ 
    enum { value = pointer_depth_impl<T const volatile>::value + 1 }; 
}; 

template <typename T> 
struct pointer_depth 
{ 
    enum { value = pointer_depth_impl<T const volatile>::value }; 
}; 
+0

Gracias James, y la última oración es muy útil también. – user2023370

+1

Un truco es pasar siempre 'T const volátil' a la siguiente recursión, y luego solo coincide con' '. Esto es algo así como un truco, pero funcionaría para evitar escribir versiones especiales const/volátiles. –

+0

@Johannes: Agradable; que elimina la necesidad de ''. No creo que sea particularmente hackish; al menos, no más de un hack que muchos otros rasgos de tipo :-) –

4

Se podría hacer a través de la repetición.

template<typename T> 
struct Depth 
{ 
    enum { value = 0 }; 
}; 

template<typename T> 
struct Depth<T*> 
{ 
    enum { value = Depth<T>::value + 1 }; 
}; 
+0

+1: Pero prefiero usar enum para esto. –

+0

@Martin: De hecho, editado. –

+0

@Martin: ¿podría explicar por qué prefiere enum? – rafak

Cuestiones relacionadas