uso el siguiente plantilla para obtener un puntero que apunta después del último elemento de una matriz:La obtención de un puntero al final de una matriz
template <typename T, size_t n>
T* end_of(T (&array)[n])
{
return array + n;
}
Ahora me parece recordar que había algún problema con este enfoque , pero no puedo recordar lo que era Creo que tenía algo que ver con la elección de los parámetros de tipo o los parámetros de función, pero no estoy seguro. Entonces, como un control de cordura, ¿ve algún problema con el código anterior? Prueba de uso pequeño:
int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));
Dado que tiene que pasar el tamaño de la matriz a la función, ¿qué está sacando realmente de esto que no podría obtener utilizando la plantilla 'array'? –
@Zac: No, la función solo tiene un único parámetro. El parámetro de la plantilla 'n' se deduce automáticamente, usted acaba de decir' end_of (array) 'como se ve en el código de ejemplo. – fredoverflow
En ese caso, el problema con el que se encontraría sería con las matrices dinámicas, ya que 'n' solo tendría el tamaño de una 'T' única. –