¿Qué puedo usar para desreferenciar un argumento de plantilla si es un puntero (o un puntero inteligente) o dejarlo como está si no lo es?Boost: desreferencia un argumento de plantilla si es un puntero
template<class T> void subf(const T& item)
{
item.foo();
}
template<class T> void f(const T& item)
{
subf(magic_dereference_function(item));
}
Cualquier cosa en Boost es una opción.
Esto es lo que tengo en este momento. Esperé que haya una solución de puntero inteligente que no implique un gran número de código para adormecer la mente. –
@Alex: No es tan insensible a la mente, ¿verdad? Por cierto, no puedo decirlo con certeza, pero lo que estás haciendo huele terriblemente mal. ¿Podría describir cuál es el propósito más amplio de esta función? Sabiendo esto, puede haber una mejor solución de alto nivel que evite la necesidad de dicha función. –
Las sobrecargas 'const' no son necesarias. Sin ellos, el nombre de tipo 'T' en sí mismo se deducirá como' const' según corresponda. – fredoverflow