Проблема с указателями на функции-члены заключается в том, что вам нужен экземпляр класса для их вызова. Вы не можете достичь этого только с помощью указателя, потому что указатель указывает только на функцию, а не на дополнительный объект, который нужно передать функции (помните, что все функции-члены имеют неявный первый параметр, который принимает тип класса).
Вы можете использовать std::function
, чтобы иметь объект функции, который содержит вызываемый объект и вызываемую функцию для него. Если у вас есть
std::function<void()> func = [&](){ return fooObject.DoSomething(); }; // Bind with a reference. Use this if the object will live as long as the function to save on a copy
std::function<void()> func = [=](){ return fooObject.DoSomething(); }; // Bind with a copy. Use this if the function will outlive the object
тогда, когда вы вызываете func
с использованием func()
, он запускает тело лямбды, которое вызывает DoSomething
на fooObject
.
Вы также можете использовать std::bind
для привязки указателя на функцию-член к объекту, для которого он вызывается, но лямбды обычно предпочтительнее, так как синтаксис прост в использовании.