How Do I Invoke a Member Function Pointer in C++?

Via std::invoke: (since C++17)

#include <functional>

std::invoke(memberFunctionPtr, myObject, parameters);

On an object:

(myObject.*memberFunctionPtr)(parameters);

On a pointer to an object:

(myObjectPtr->*memberFunctionPtr)(parameters);


How Do I Declare a Member Function Pointer in C++?

Ideally, use a type alias: (since C++11)

using typeName = returnType (className::*)(parameterTypes);

...or a typedef:

typedef returnType (className::*typeName)(parameterTypes);

...and then use it like a regular type:

As a variable:

typeName variableName = &className::function_name;

As an array:

typeName arrayName[] = { &className::function_name0, ... };

As a parameter to a function:

int my_function(typeName parameterName);

As a return value from a function:

typeName my_function(int, ...);


What About The Verbose Syntax?

Please reconsider, but if you must...

As a variable:

returnType (className::*variableName)(parameterTypes) = &className::function_name;

As an array:

returnType (className::*arrayName[])(parameterTypes) = { &className::function_name0, ... };

As a parameter to a function:

int my_function(returnType (className::*parameterName)(parameterTypes));

As a return value from a function: (with trailing return types, since C++11)

auto my_function(int, ...) -> auto (className::*)(parameterTypes) -> returnType;

As a return value from a function: (without trailing return types, or prior to C++11)

returnType (className::*my_function(int, ...))(parameterTypes);
This site is not intended to be an exhaustive list of all possible uses of pointers to member functions.
It is highly recommended to use a type alias or typedef for the sake of readability.

Like the site, but wish it had a spicier URL? https://fuckingmemberfunctionpointers.com might be more your speed.