Anton,
As shown by Pasha, you can always call gROOT->ProcessLine
from the compiled code to execute via the interpreter.
However, this may be a very slow procedure in the case
you intend to use this service.
As you were guessing, my answer is "yes, look in the second TF1
constructor". This is a real example and you have to understand
each of the following lines
- in the constructor
char *funcname = G__p2f2funcname(fcn);
SetTitle(funcname);
if (funcname) {
fMethodCall = new TMethodCall();
fMethodCall->InitWithPrototype(funcname,"Double_t*,Double_t*");
fNumber = -1;
} else {
Printf("Function:%s cannot be compiled",name);
}
- in TF1::EvalPar
Double_t result = 0;
if (fMethodCall) fMethodCall->Execute(result);
It is up to you to do the bookeeping of fMethodCall as well as
the function name.
The method above is efficient. Each call to fMethodCall->Execute
executes pre-compiled bytecode as opposed to string interpretation
in the case of gROOT->ProcessLine.
Rene Brun
On Sun, 27 Feb 2000, Anton Fokin wrote:
> Hello!
>
> I am in troubles with calling interpreter function from compiled code.
>
> Let's say I have compiled class
>
> class TMyClass {
> private:
> Float_t (*fFunc) ();
> public:
> void SetFunction(const char* Macro);
> Float_t Function() { return (*fFunc)() }
> };
>
>
> and a macro in Macro.C file
>
> Float_t
> MyFunc()
> {
> printf("the answer is ...\n");
> return 42;
> }
>
> now I would like to write in my compiled program:
>
>
> TMyClass *MyClass = new TMyClass();
> MyClass->SetFunction("Macro.C");
> Float_t Answer = MyClass->Function();
>
>
> How TMyClass::SetFunction(const char* Macro) should look like? I am sure you
> suggest me to look into TF1 implementation, but could you write a few lines
> of example code instead? I hope it helps others too ...
>
> Best regards,
> Anton
>
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:20 MET