Rzutowanie typu danych double.

0

Czy ktoś mógł by mi powiedzieć co robi

 (double (*) (double))

w podanym fragmencie kodu:

 double tablica[5] = {2, 3, 9, 16, 25};
   vector<double> v(tablica, tablica+5);
   vector<double> wyniki(5);

   transform(v.begin(), v.end(), wyniki.begin(), (double (*) (double)) sqrt );
   for( int i=0; i<5; i++ )
      cout << wyniki[i] << '\n';
3

To jest sygnatura funkcji (a dokładniej wskaźnik na funkcję) zwracającej typ double i przyjmujący double. Bez tego "opakowania" kompilator nie będzie wiedział którą z tych funkcji wybrać są to przeciążenia jak napisał kolega niżej. Stąd takie rzutowanie jest niezbędne.
A co do samego transform(...) to wykonuje ono na każdym elemencie kontenera te wyciągnie pierwiastka (sqrt). Ale chyba o tym wiesz :-)

EDIT: Dla niektórych typów sqrt jest zaimplementowany jako szablon.

2

sqrt jest przeciążoną funkcją, która ma kilka wersji, dlatego rzutujesz na double (*)(double) (wskaźnik na funkcję przyjmującą jeden argument typu double i zwracającą double) by transform wiedziało, której wersji używać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1