Verfasst am: 27.09.2012, 10:21
Titel: typecast mit selbstgeschriebener Klasse
Hallo,
ich habe diese Klasse geschrieben:
Code:
classdef Model_Struct <handle
%Representiert einen Modelkontainer mit allen benoetigten Parametern.
% Die Klasse verwaltet alle fuer ein Model benoetigten Daten. % param enthaelt saemtliche Parameter die fuer das Model von % beudeutung sind.
properties
id;
name;
typ;
class_id;
param;
tables;
von;
bis;
rawdata_type;
rawdata;
Model;
holidays;
Composite_Indicator;
Composite_Signal;
ModelContainer;%Composite only
Simu_Indicator;
SimuResult;
end
%% Constructor function MS = Model_Struct(id,name,typ,classid,parameter,tables,von,bis,rawdata_type,rawdata,model,holidays,composite_indicator,composite_signal,modelcontainer,simu_indicator,simuresult)
In einer anderen Datei greife ich auf Objekte dieser Klasse zu:
Code:
function model = getModels() ... global ModelContainer selectedModel;
modelids=zeros(1,size(ModelContainer,2));
for j=1:size(ModelContainer,2)
modelids(1,j)=ModelContainer(1,j).id;
end for j=1:size(selectedModel.Composite_Indicator,2) [~, index] = ismember(selectedModel.Composite_Indicator(1,j).mid, modelids);
model(j)=ModelContainer(1,index);
model(j).Model=0;
model(j).von=selectedModel.von;
model(j).bis=selectedModel.bis;
end
end%function getModels
Die Variable model die mit Objekten der obigen Klasse Model_Struct gefüllt wird würe ich gerne vorab deklarieren. Wie das im Falle einer "nicht-Standard"-Klasse geht ist mir aber nicht klar!
Das klappt z. B. nicht:
Code:
model=cell(1,size(selectedModel.Composite_Indicator,2));
model = typecast(model, 'Model_Struct')
Verfasst am: 28.09.2012, 08:53
Titel: Re: typecast mit selbstgeschriebener Klasse
Hallo Lloyd Blankfein,
Wenn ich es richtig verstehe, ist das Casten überflüssig. Die CELL ist eine Liste von beliebigen Variablen. Nach dem Erstellen enthält sie NULL-Pointer und es ist nicht hilfreich diesen einen Typ zuzuweisen. Vor allem musst und darfst Du nicht dem CELL-Array einen anderen Typ zuweisen. Dir geht es ja, wenn ich Dich richtig verstehe, um die Elemente des CELLs, oder?
TYPECAST ändert übrigens den Type einer Variablen ohne die Daten zu ändern. Ein CAST dagegen interpretiert die Werte so, dass sie zum neuen Typ passen.
??? The following error occurred converting from myObject.Data.DataObjects.Model_Struct to cell:
Error using ==> cell
Conversion to cell from myObject.Data.DataObjects.Model_Struct is not possible.
Irgendetwas muss da also konvertiert werden!?
Allerdings wird diese Schleife selten genutzt und die Speicherallokation mit jeder Iteration ist deshalb nicht wirklich dramatisch.
Wenn Du aber gar kein CELL-Array möchtest, sondern ein Struct-Array, wäre es eine effiziente Methode, die Schleife rückwärts laufen zu lassen:
Super, das war genau was ich meinte.
Vielen Dank!
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.