How to create a function handle to an object's method?
11 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Matt J
on 24 Dec 2021
tmp=obj.instance_of_my_class1;
for f_name = f_names
obj.func_handles(f_name) = @(varargin)tmp.(f_name)(varargin{:});
end
4 Comments
More Answers (0)
See Also
Categories
Find more on Whos in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!