How to create a function handle to an object's method?
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi, everyone.
I wanna create a function handle to an object's method. I have two classes, my_class1 and my_class2. my_class2 has a instance of my_class1 as its property. What I want to do is to create function handles to the instance of my_class1, and to use them in my_class2's method. Here's my code and when I tried to run it, it says "Unrecognized function obj.instance_of_my_class1.foo1". What is the correct way? I know eval() can do that, but it's evil isnt it?
classdef my_class1
methods
function foo1(obj, arg1, arg2)
% do something
end
function foon(obj, arg1, arg2)
% do something
end
function obj = my_class1(arg1, arg2)
% do something
end
end
end
classdef my_class2
properties
instance_of_my_class1
func_handles
end
methods
function obj = my_class2()
obj.instance_of_my_class1 = my_class1(1, 2)';
f_names = methods(obj.instance_of_my_class1); % names of my_class1's public methods
obj.func_handles = containers.Map(); % function name -> handle mapping
for f_name = f_names
handle = str2func(strcat('obj.instance_of_my_class1.', f_name{1, 1})); % HOW?
obj.func_handles(f_name) = handle;
end
end
function foo(obj, function_name)
% for example
f = obj.func_handles(function_name);
f(); % Unrecoginsed function
end
end
end
0 Kommentare
Akzeptierte Antwort
Matt J
am 24 Dez. 2021
tmp=obj.instance_of_my_class1;
for f_name = f_names
obj.func_handles(f_name) = @(varargin)tmp.(f_name)(varargin{:});
end
4 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Whos finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!