9.1.6 Pokazivači na preopterećene funkcije
Pokazivač se može deklarisati tako da upućuje na funkciju u skupu preopterećenih funkcija. Kako se to može učiniti? Na primer:
Code:
extern void ff( vector<double> );
extern void ff( unsigned int );
// na koju se funkciju odnosi pokazivač pf1?
void ( *pf1 )( unsigned int ) = &ff;
Pošto je funkcija ff preopterećena, samo na isnovu izraza inicijalizatora: &ff kompajler ne može da zna koju funkciju da izabere. Da bi izabrao funkciju koja inicijalizuje pokazivač, kompajler u skupu preopterećenih funkcija traži onu koja ima isti tip reziltata i istu listu parametarakao što je tip funkcije na koju upućuje pokazivač. U prethodnom slučaju izabrana je funkcija ff(unsigned int).
Šta se događa ako nijedna funkcija ne odgovara potpuno tipu pokazivača? Ako nijedna funkcija ne odgovara potpuno, inicijaliyacija dovodi do greške u fazi kompajliranje. Na primer:
Code:
extern void ff( vector<double> );
extern void ff( unsigned int );
// pogrešno: nema podudaranja: pogrešna lista parametara
void ( *pf2 )( int ) = &ff;
// pogrešno: nema podudaranja: pogrešan tip rezultata
double ( *pf3 )( vector<double> ) = &ff;
Dodeljivanje funkcioniše na sličan način...