How to create a function handle to an object's method?
    9 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
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 comentarios
Respuesta aceptada
  Matt J
      
      
 el 24 de Dic. de 2021
        tmp=obj.instance_of_my_class1;
for f_name = f_names
    obj.func_handles(f_name) = @(varargin)tmp.(f_name)(varargin{:});
end
4 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Handle Classes en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

