Use function handle in MEX file (serialize it)

4 ビュー (過去 30 日間)
Szabolcs
Szabolcs 2013 年 4 月 8 日
What sorts of things can one do with a function handle in a MEX file?
What I'd like to do is extract all the relevant data from an mxArray that represents a function handle in such a way that I could create a different mxArray that will represent the same function handle.
In other words, I'd need to serialize an mxArray function handle.
I need this while building a bridge between MATLAB and another language. I would like to support classes in MATLAB. I can take apart just about any other kind of mxArray and put them back together as there exist mx* functions for these (e.g. mxGetData() for numerical arrays, etc.) So far it's only function handles I couldn't cope with.
EDIT: For this application I can always keep a dictionary of available function handles. I do not need or want to expose the underlying data (which may be a pointer, thus unsafe). But in order to keep a dictionary, I need to be able to at least compare function handles: do two mxArray refer to the same function handle?

採用された回答

James Tursa
James Tursa 2013 年 4 月 8 日
編集済み: James Tursa 2013 年 4 月 8 日
You might look into these undocumented API functions:
mxSerialize
mxDeserialize
I have never used them myself, but you can find some information here:
I have no idea how these functions would work for a function handle, which can have multiple embedded mxArray data buried within them.
How are you going to deal with classdef objects?
  2 件のコメント
Szabolcs
Szabolcs 2013 年 4 月 8 日
There's some interesting info here as well: mxFunctionHandleToSavedStruct() and mxSavedStructToFunctionHandle()
James Tursa
James Tursa 2013 年 4 月 9 日
I checked those function out and FYI they preserve the shared-data-copy-ness of the data (for lack of a better term). E.g., if you start with something like this:
A = rand(2);
f = @(x)(A*x);
the function handle f will have a shared-data-copy of A inside of it. If you subsequently use mxFunctionHandleToSavedStruct on f, the resulting struct will have a shared-data-copy of A as well. And likewise if you subsequently go through mxSavedStructToFunctionHandle also. All of these will have shared-data-copies of the workspace variables (in this case A) used in the function handle.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Type Identification についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by