Dzięki, @antyqjon.
W tym momencie zadziałała również moja wersja (z sizeof(typ)), z tym, że w teraz traci sens zastosowanie takiej konstrukcji:
#include <iostream>
// @antyqjon
template <typename T, unsigned int N> unsigned int arr_size(const T(&tab)[N])
{
return N;
}
// moja
template <typename T, unsigned int N>unsigned int array_sizeof(const T (&array)[N]) {
return sizeof(array)/sizeof(T);
}//array_sizeof
int main()
{
char t[5555];
std::cout << arr_size(t)<<std::endl;
int z[2345];
std::cout<<array_sizeof(z);
return 0;
}
wyjście:
Cytat
5555
2345
Cytat
W C++ i tak musisz podać rozmiar tablicy podczas jej tworzenia, żeby zarezerwować odpowiedni rozmiar pamięci, więc tworzenie takiej funkcji jest bez sensu. Zresztą widać to w przykładzie mojego przedmówcy. Chyba, że mylisz pojęcia i piszesz np. o liście dynamicznej lub czymś w tym stylu.
Nie chodzi mi w tym momencie o sam problem sprawdzenia rozmiaru takiej tablicy, bo to można rozwiązać na milion sposobów, lecz zastosowania parametru szablonu jako argumentu dla sizeof().