How to properly overload horzcat and vertcat?
Show older comments
Hi, im having some trouble overloading horzcat/vertcat for my class with 2 properties:
classdef myClass
properties
a
b
end
methods
function obj = myClass(u,v)
obj.a = u;
obj.b = v;
end
function out = horzcat(varargin)
...
end
end
end
As a result of the concatenation i want to achieve just the concatenations of the two proprieties, for example concatenating those objects:
x = myClass(2,3);
y = myClass(4,5);
ConcArray = [x,y];
i would like to have as a result a single object with as properties the concatenation of each property. Basically having the equivalent of:
EquivalentObj = myClass([2,4],[3,5])
I came up with this solution:
function out = horzcat(varargin)
n = length(varargin);
aProp = [];
bProp = [];
for i = 1 : n
var = varargin{i};
aProp = [aProp var.a];
bProp = [bProp var.b];
end
out = myClass(aProp,bProp);
end
but it looks really bad since i couldn't preallocate the concatenating arrays, im using a for loop and in each loop im using standard horzcat recursively.
Any ideas on how to improve that ? Thank you in advance.
2 Comments
Walter Roberson
on 25 Jan 2019
I do not see any property data type validation in your constructor, so we must assume that you want to be able to handle inputs of different data types, like
[myClass(2,3), myClass(11, tf([17 0], [1 9]))]
But to handle this you are going to have to define what the output should be. Your question suggests that you would want property a to become [2 11], but [3 tf([17 0], [1 9]))] cannot be directly mixed, and we don't know what you want to have happen in this situation.
Eugenio Grabovic
on 25 Jan 2019
Accepted Answer
More Answers (0)
Categories
Find more on Construct and Work with Object Arrays 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!