You don't need to know C++'s complicated function typedef declaration syntax. Here's a cute trick I found.
Quick, describe this typedef:
typedef C &(__cdecl C::* const CB )(const C &) const;
Easy! CB is a pointer to a member function of class C accepting a const reference to a C object and returning a non-const reference to a C object. Oh, and it’s a const member function. Oh, and the function pointer itself is const… (Right?)
The C++ function declaration specification syntax is notoriously obtuse and hard to remember. Yes, there are tricks seasoned C++ veterans may use to decipher such horrors, but that’s not what this tip is about. This tip is about how you don’t need to remember this horrible syntax and still be able to declare such function pointer typedefs (e.g. in case you’re interacting with some legacy API that never heard of boost::function).
Instead of breaking a mental sweat, let the compiler do the work for you. Next time you’re trying to create a typedef to a member function that looks like this:
struct C {
const C& Callback(const C&) const { }
};
Instead of struggling to manually come up with the complex syntax above, induce an intentional compilation error which will force the compiler to name the beast.
For example:
char c = &C::Callback;
The compiler happily spews this helpful error message:
“… cannot convert from 'const C &(__cdecl C::* )(const C &) const' to 'char'”
Which is what we’re looking for. :)