Вам не нужно знать синтаксис объявления сложной функции typedef в C ++. Вот милый трюк, который я нашел.
Быстро, опишите этот typedef:
typedef C &(__cdecl C::* const CB )(const C &) const;
Легко! CB - указатель на функцию-член класса C, принимающую константную ссылку на объект C и возвращающую неконстантную ссылку на объект C. О, и это постоянная функция-член. О, и сам указатель на функцию является константой ... (верно?)
Синтаксис спецификации объявления функции C ++ общеизвестно тупой и его трудно запомнить. Да, есть уловки опытных ветеранов C ++, которые могут использовать для расшифровки таких ужасов, но это не то, о чем этот совет. Этот совет о том, как вам не нужно запоминать этот ужасный синтаксис и при этом иметь возможность объявлять такие определения типов указателей на функции (например, если вы взаимодействуете с каким-то устаревшим API, который никогда не слышал о boost :: function).
Вместо того, чтобы ломать голову, пусть компилятор сделает всю работу за вас. В следующий раз вы пытаетесь создать typedef для функции-члена, которая выглядит следующим образом:
struct C {
const C& Callback(const C&) const { }
};
Вместо того чтобы вручную пытаться придумать сложный синтаксис, приведенный выше, вызовите преднамеренную ошибку компиляции, которая заставит компилятор назвать зверя.
Например:
char c = &C::Callback;
Компилятор с радостью издает это полезное сообщение об ошибке:
“… cannot convert from 'const C &(__cdecl C::* )(const C &) const' to 'char'”
Что мы и ищем. :)