Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [C++] f-cja zwracająca ilość elementów w tablicy - zastosowanie sizeof()
Forum PHP.pl > Inne > Hydepark
blooregard
Z potrzeby chwili napisałem prosty szablon funkcji, którego zadaniem jest zwracanie ilości elementów tablicy o dowolnym typie elementów (czyli klasyczne sizeof(tablica)/sizeof(typ_elementu)).

Jednakże pojawił się mały problem:
Cytat
//f-cja zwracajaca ilosc elementow tablicy

template <class T> T array_sizeof(const T * array) {
return sizeof(array)/sizeof(T);
}//array_sizeof


Czy jest możliwe takie użycie parametru T w szablonie funkcji, tzn., jako argumentu dla sizeof() ?
Bo niestety nie działa to w ten sposób.
thek
A to nie lepiej użyć STL i funkcji size() na predefiniowanych vector czy list? Po co wymyślać koło na nowo smile.gif Masz tam wiele gotowych funkcji oraz iteratory a także parę innych dodatków. Moim zdaniem komplikujesz sobie życie niepotrzebnie smile.gif
blooregard
@thek, z pewnością masz rację, ale w tej chwili nie chodzi o zastosowanie STL, tylko o sam fakt - czy mozna użyć T jako argumentu dla sizeof() ?
antyqjon
A może coś w ten deseń:
  1. #include <iostream>
  2.  
  3. template <typename T, unsigned int N>
  4. unsigned int arr_size(const T(&tab)[N])
  5. {
  6. return N;
  7. }
  8.  
  9. int main()
  10. {
  11. char t[5555];
  12. std::cout << arr_size(t);
  13. return 0;
  14. }
Speedy
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.
blooregard
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:

  1. #include <iostream>
  2.  
  3. // @antyqjon
  4. template <typename T, unsigned int N> unsigned int arr_size(const T(&tab)[N])
  5. {
  6. return N;
  7. }
  8.  
  9. // moja
  10. template <typename T, unsigned int N>unsigned int array_sizeof(const T (&array)[N]) {
  11. return sizeof(array)/sizeof(T);
  12. }//array_sizeof
  13.  
  14. int main()
  15. {
  16. char t[5555];
  17. std::cout << arr_size(t)<<std::endl;
  18.  
  19. int z[2345];
  20. std::cout<<array_sizeof(z);
  21.  
  22. return 0;
  23. }


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().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.