Вы можете написать шаблон функции как:
template<typename ObjType>
void ReceiveFuncPtr (ObjType o, void (ObjType::*pf)(int) )
{
(o.*pf)(1);
}
Этот шаблон функции автоматически выберет void foo (int i)
.
Мой предыдущий ответ (не удаляя его, поскольку это может быть полезно для других) :
Ваша проблема:
ReceiveFuncPtr(obj, &A::foo); // don't want typecast here
Вы можете сделать это:
void (A::*pFun)(int) = &A::foo; // No casting here!
ReceiveFuncPtr(obj, pFun); // No casting here!
pFun
- указатель на void A::f(int)
Вы также можете использовать typedef как:
typedef void (A::*FunDouble)(double);
typedef void (A::*FunInt)(int);
FunInt pFun = &A::foo; // No casting here!
ReceiveFuncPtr(obj, pFun); // No casting here!