Вам нужна ссылка (или указатель) на объект, для которого вы хотите вызвать метод.
Я бы предложил создать базовый класс шаблона (параметры шаблона - это возвращаемое значение и параметры функции) и производный класс шаблона (все параметры базового шаблона, а также тип объекта). Производный класс содержит ссылку на объект и указатель на функцию-член.
EDIT:
Может быть, что-то вроде этого (не проверено):
template < typename R, typename T1 >
class CbBase
{
public:
virtual ~CbBase(){}
virtual R call( T1 t1 ) = 0;
};
template < typename O, typename R, typename T1 >
class MemFunPtrCb : public CbBase< R, T1 >
{
public:
MemFunPtrCb( O &obj_, R (O::*memFcPtr_)( T1 t1 ) ) :
obj( obj_ ),
memFcPtr( memFcPtr_ ),
{
}
virtual R call( T1 t1 )
{
obj.memFcPtr( t1 );
}
private:
O &obj;
R (O::*memFcPtr)( T1 t1 );
};
Этот пример отсутствует:
функция для создания объекта MemFuncPtrCb, эта функция должна получить ссылку на объект и функцию-член и вернуть shared_ptr в соответствующий базовый класс
* 1018 определения типов *