Функция частного участника, которая принимает указатель на частный член в том же classе

Как я могу это сделать? (Следующий код НЕ работает, но я надеюсь, что он объяснит эту идею.)

class MyClass { .... private: int ToBeCalled(int a, char* b); typedef (MyClass::*FuncSig)(int a, char* b); int Caller(FuncSig *func, char* some_string); } 

Я хочу назвать Caller каким-то образом:

 Caller(ToBeCalled, "stuff") 

и вызов Caller ToBeCalled с любыми параметрами, которые, по его мнению, нуждаются в передаче. Если это вообще возможно, я хочу сохранить все, заключенное в частную часть моего classа. В действительности у меня было бы около 50 функций, таких как ToBeCalled , поэтому я не вижу способа избежать этого.

Спасибо за любые предложения. 🙂

Вы больше всего там. Вам не хватает типа возврата из 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*FuncSig* – это указатель на указатель на функцию-член, с лишним ненужным уровнем косвенности. Затем вы можете использовать оператор стрелочной звезды (а не его официальное название):

 (object_to_be_called_on ->* func)(args); 

Для объектов без указателя (например, объектов в стеке или ссылок на объекты) используется оператор «точка-звезда»:

 MyClass x; (x .* func)(args); 

Кроме того, будьте осторожны с приоритетом оператора – операторы со стрелкой и точкой-звездой имеют более низкий приоритет, чем вызовы функций, поэтому вам нужно добавить дополнительные скобки, как я уже делал выше.

Я предполагаю, что вы уже пробовали Caller(MyClass::ToBeCalled, "stuff") , но есть ли какая-то конкретная причина, по которой вам нужен указатель на функцию? Кроме того, отправьте фактическую ошибку компилятора.