#include
typedef int (*func)(int a, int b);
int call_func(int a, int b)
{
return a + b;
}
void function(int a, int b, func f);
int main ()
{
function(5, 2, &call_func);
system("pause");
}
void function(int a, int b, func f)
{
int sum = (*f)(a, b);
std::cout << "Sum = " << sum << std::endl;
}
typedef вводит новое имя для типа, и примеры вида typedef int int32 думаю понятны любому. Ну а что с typedef int (*func)(int a, int b); в этом коде, он же должен вместо func f подставить int (int a, int b) f, а подставляет int f(int a, int b), хотя я не только это не понимаю, а и то, откуда он знает что заменять нужно func, ведь это неполный тип или имя. Описание typedef в интернете заканчиваются на typedef int int32 или же просто с примером структур и функций или ещё каких сложных типов, но без объяснений. Я уже не знаю что думать, с дефайном было как-то проще.
Ответ
typedef -- не просто текстовая подстановка. Он работает следующим образом: если X -- имя typedef-типа, объявление переменной X x; работает как будто бы на этом месте стоит описание типа в typedef, где X заменено на x То есть typedef int (*func)(int a, int b); func f; работает как int (* /*было func, стало*/ f )(int a, int b);
Комментариев нет:
Отправить комментарий