#функции #typedef #cpp
#includeusing namespace std; 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 или же просто с примером структур и функций или ещё каких сложных типов, но без объяснений. Я уже не знаю что думать, с дефайном было как-то проще.
Ответы
Ответ 1
typedef -- не просто текстовая подстановка. Он работает следующим образом: если X -- имя typedef-типа, объявление переменной X x; работает как будто бы на этом месте стоит описание типа в typedef, где X заменено на x. То есть typedef int (*func)(int a, int b); func f; работает как int (* /*было func, стало*/ f )(int a, int b);
Комментариев нет:
Отправить комментарий