Io uso il seguente modello per ottenere un puntamento puntatore dopo l'ultimo elemento di un array:Ottenere un puntatore alla fine di un array
template <typename T, size_t n>
T* end_of(T (&array)[n])
{
return array + n;
}
Ora mi pare di ricordare che ci fosse qualche problema con questo approccio , ma non riesco a ricordare cosa fosse. Credo che abbia avuto qualcosa con la scelta dei parametri di tipo o dei parametri di funzione, ma non ne sono sicuro. Quindi, proprio come un controllo di integrità, vedi qualche problema con il codice sopra? Test di utilizzo ridotto:
int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));
Dal momento che si deve passare nella dimensione della matrice alla funzione, che cosa stai davvero uscire da questa che non si poteva ottenere utilizzando il modello 'array'? –
@Zac: no, la funzione ha solo un singolo parametro. Il parametro template 'n' viene dedotto automaticamente, si dice semplicemente' end_of (array) 'come si vede nel codice di esempio. – fredoverflow
In questo caso, il problema che dovresti incontrare riguarda gli array dinamici poiché 'n' sarebbe solo la dimensione di un singolo' T'. –