MEX-equivalent of INPUTNAME

All,
Is there a way, within a mexFunction, of retrieving the actual name of (the caller's) argument passed as one of the prhs parameters? Or, in other words, is there a way in MEX to do the equivalent of the inputname function as in
function f(a)
fprintf('Formal parameter ''a'' is called ''%s''\n', ...
inputname(1))
end

 Akzeptierte Antwort

Kaustubha Govind
Kaustubha Govind am 10 Nov. 2011

0 Stimmen

I don't think there is a MEX-API function that is the equivalent, but you can always use mexCallMATLAB to dispatch the call to MATLAB itself.

7 Kommentare

Bård Skaflestad
Bård Skaflestad am 10 Nov. 2011
Right,
I haven't actually tested it, so I'm speculating here, but won't dispatching to, say, |inputname(n)| report the |n|-th parameter in the *caller's* parameter list (if there is such a thing) and not the |n|-th argument of the |mexFunction| parameter list?
Bård Skaflestad
Bård Skaflestad am 10 Nov. 2011
No, it doesn't (return caller's values). This method is exactly what I'm looking for.
To give a bit of perspective, I'm trying to call an anonymous function from a MEX function. As far as I understand, function handles aren't exposed in the MEX-API and there is no equivalent of mexCallMATLAB that accepts (something akin to) a function pointer.
In my case, the function handle is stored in a structure field and the best way I could think of to achieve my goal was to dynamically form a string like
"a = s.f(rand(10))"
with |s| being the variable whose name I'd derive from 'inputname' and then to use mexEvalString (or the WithTrap variant) to affect the function call. Is there some other way?
Jan
Jan am 10 Nov. 2011
You can use mexCallMATLAB to call FEVAL with the function handle as argument. Perhaps somebody knows how to use mxFevalFunctionHandle?
Bård Skaflestad
Bård Skaflestad am 10 Nov. 2011
Ah, of course. Why didn't I think of that? The convenience of function handles means I haven't used FEVAL in probably about six years. I'd pretty much forgotten its existence...
I'll see how the FEVAL method pans out. Thanks a lot!
Jan
Jan am 10 Nov. 2011
Sorry, my comment should be an answer actually.
Kaustubha Govind
Kaustubha Govind am 11 Nov. 2011
This solution has an attached example where a function handle is passed into a MEX-function, which is then evaluated using mexCallMATLAB and feval: http://www.mathworks.com/support/solutions/en/data/1-9RKXIN/index.html - I believe this is what Jan is suggesting.
Bård Skaflestad
Bård Skaflestad am 11 Nov. 2011
I suppose so, too. I've tried it now and it works perfectly. Thank you so much, both of you. This was really helpful.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 10 Nov. 2011

0 Stimmen

You can use mexCallMATLAB to call FEVAL with the function handle as argument.
Perhaps somebody knows how to use mxFevalFunctionHandle?

1 Kommentar

Bård Skaflestad
Bård Skaflestad am 11 Nov. 2011
Thank you, Jan. This is the solution I ended up using.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Language Fundamentals finden Sie in Hilfe-Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by