How can I create an inherit class based on variable value?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Chung-Tao Chou
el 20 de Feb. de 2023
Hi,
I've defined multiple classes (class1, class2, class3...) which all inherit from one class (class0):
classdef class0 ...
classdef class1 < class0 ...
classdef class2 < class0 ...
classdef class3 < class0 ...
and I have a variable 'index', which is 1 or 2 or 3. I'm trying to create a object whose class type is based on this index. For example, if index is 1, I want a object of class1. So far I can acheive this by calling a function like in the following code:
function test = create_class_obj(index)
switch index
case 1
test = class1();
case 2
test = class2();
case 3
test = class3();
end
end
Is there an elegant way to encode this into the constructor of class0? So that I can do the following:
test = class0(index);
Thanks.
Josh
0 comentarios
Respuesta aceptada
Steven Lord
el 20 de Feb. de 2023
You could create a function handle to the constructor then call that function handle.
index = 2; % example
fh = str2func("class" + index)
fh()
You'd probably want to check (either before creating the function handle or while calling it, using try and catch) that the class you're trying to instantiate exists.
But I would not put this into the constructor of class0. I would instead make a factory function or method that creates the appropriate subclass object.
function class0()
disp("Inside class0")
end
function class1()
disp("Inside class1")
end
function class2()
disp("Inside class2")
end
function class3()
disp("Inside class3")
end
1 comentario
Más respuestas (1)
chrisw23
el 20 de Feb. de 2023
Editada: chrisw23
el 20 de Feb. de 2023
classdef baseClass < handle
methods
function baseClass(index)
...
end
end
...
classdef class0 < baseClass
methods
function class0(index)
% explicitly call the superclass constructor with argument
@obj.baseClass(index)
end
...
0 comentarios
Ver también
Categorías
Más información sobre Extend Testing Frameworks 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!