Ты большую часть пути туда. Вам не хватает возвращаемого типа из typedef, оно должно быть
typedef int (MyClass::*FuncSig)(int, char*);
Теперь вам просто нужно правильно его использовать:
int Caller(FuncSig func, int a, char* some_string)
{
return (this->*func)(a, some_string);
}
Вы хотите передать простые FuncSig
экземпляры, а не FuncSig*
- FuncSig*
- это указатель на указатель на функцию-член с дополнительным ненужным уровнем косвенности. Затем вы используете оператор «стрелка-звезда» (не его официальное название) для его вызова:
(object_to_be_called_on ->* func)(args);
Для объектов без указателя (например, объекты в стеке или ссылки на объекты) вы используете оператор точка-звезда:
MyClass x;
(x .* func)(args);
Кроме того, будьте осторожны с приоритетами операторов - операторы стрелка-звезда и точка-звезда имеют более низкий приоритет, чем вызовы функций, поэтому вам нужно поставить дополнительные скобки, как я делал выше.