I have solved this problem in my code by declaring a simple function that
calls the member function:
PRCHe3 *obj;
extern const double dNaN; // initialized elsewhere to
numeric_limits::signaling_NaN() or such.
Double_t wrapFunc(Double_t *xvec, Double_t *yvec)
{
if (obj != NULL)
return obj->IntegrandERT(xvec,yvec);
return dNaN; // or perhaps throw an exception...
}
TF1 *f1 = new TF1("elastic", &wrapFunc, -10, 10, 5);
or if you don't use member variables in IntegrandERT, then you can declare
it static and define
Double_t wrapFunc(Double_t *xvec, Double_t *yvec)
{
return PRCHe3::IntegrandERT(xvec,yvec);
}
It's a pain that you have to manually set obj to point to the appropriate
object of class PRCHe3. Masa Goto convinced me that the lack of general
compiler standardization for representing the vtbl makes implementing
pointers to member functions in CINT hard to do in a way that would
interoperate with precompiled code (see the ARM for details on this
problem). Such is life.
Jonathan
===========================================================================
Jonathan M. Gilligan <jonathan.gilligan@vanderbilt.edu>
Research Assistant Professor of Physics (615) 343-6252
Dept. of Physics and Astronomy, Box 1807-B Fax: 343-7263
6823 Stevenson Center
Vanderbilt University, Nashville, TN 37235 Dep't Office: 322-2828
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:38 MET