Мне кажется, что функция lmdif принимает «void * p» в качестве аргумента пользователя, который он просто переходит к обратному вызову (minpack_func_mn fcn).
Если это так, просто сделайте LT_Calibrator :: fcn статическая функция и передать ваш объект в качестве параметра «p». Затем вы можете указать аргумент user (p), чтобы вернуть свой объект, если хотите.
class LT_Calibrator
{
public:
static int fcn(void *p, int m, int n, const double *x, double *fvec,int iflag)
{
LT_Calibrator* pCalibrator = static_cast<LT_Calibrator*>( p );
}
};
Затем наберите:
LT_Calibrator someCalibrator;
info=lmdif(<_Calibrator::fcn, &someCalibrator, m, n, x, fvec, ftol);