Я знаю, что обычно указатель функции объявляется так:
void __stdcall my_func(int i) {} // for assigning
void (__stdcall * my_ptr)(int) = &my_func;
Теперь у меня было несколько функций, которые принимают указатель на функцию в качестве аргумента:
void calling_func(void (__stdcall * callback)(int)) { *callback(1); }
В заголовочном файле я просто убрал название вещи:
void calling_func(void (__stdcall *)(int));
и вуаля, это сработало ... и заставило меня задуматься: если это полное объявление типа, нельзя ли использовать обычный синтаксис TYPE NAME = VALUE
также для указателей на функции?
Я пытался объявить:
( void (__stdcall *)(int) ) callback = &my_func;
и он также компилируется! Почему это не используется чаще? Есть ли недостатки в этой записи? Мне кажется, что это значительно облегчило бы использование указателей на функции ... также в typedefs, например: обычно это typedef OLDNAME NEWNAME
, просто с указателями на функции это тот странный синтаксис наизнанку, где новое имя фактически находится в середине всего выражения. Не говоря уже о записи для функций, возвращающих указатель на функцию ...