2016-04-09 32 views
0

saygı yapısına birdönüştürme sınıf özellikleri ... ben vb seçilen örnekleme hızı filtre grubu gecikme gibi şeyler dayalı bir model parametrelerini değiştirmek farklı <em>modları</em>, üzerinde yapılandırılmış bir Simulink modeli üzerinde çalışıyorum görünürlük

Tüm parametreleri ParameterStruct üzerinde ayarlamaya rağmen, her mod için uygun parametre yapısını yükleyin.

Bu tür haritalar Bağımlı özellikli bir sınıfa iyi bir şekilde bağlıdır, çünkü yalnızca birkaç girdiden oluşturulan çok sayıda model parametresi vardır. Bir class görünürlük bir struct oluşturmaya çalıştığınızda

Ama saygı değildir: Ben sonradan C'ye yapı ihraç etmek gerekir çünkü

classdef SquareArea 
    properties 
     Width 
     Height 
    end 
    properties (Access =private) 
     Hidden 
    end 
    properties (Dependent) 
     Area 
    end 
    methods 
     function a = get.Area(obj) 
     a = obj.Width * obj.Height; 
     end 
    end 
end 
>> x=SquareArea 

x = 

    SquareArea with properties: 

    Width: [] 
    Height: [] 
     Area: [] 

>> struct(x) 
Warning: Calling STRUCT on an object prevents the object 
from hiding its implementation details and should thus 
be avoided. Use DISP or DISPLAY to see the visible public 
details of an object. See 'help struct' for more information. 

ans = 

    Width: [] 
    Height: [] 
    Hidden: [] 
     Area: [] 

Bu, kabul edilemez modu, oluşturulan koddan dinamik olarak ayarlayabilmek için.

cevap

1

Klasının için varsayılan struct geçersiz olabilir: Artık

classdef SquareArea 
    properties 
     Width = 0 
     Height = 0 
    end 
    properties (Access=private) 
     Hidden 
    end 
    properties (Dependent) 
     Area 
    end 
    methods 
     function a = get.Area(obj) 
     a = obj.Width * obj.Height; 
     end 
     function s = struct(obj) 
      s = struct('Width',obj.Width, 'Height',obj.Height, 'Area',obj.Area); 
     end 
    end 
end 

: Hala açıkça yerleşik birini arayarak orijinal davranışı elde edebilirsiniz

>> obj = SquareArea 
obj = 
    SquareArea with properties: 

    Width: 0 
    Height: 0 
     Area: 0 
>> struct(obj) 
ans = 
    Width: 0 
    Height: 0 
     Area: 0 

Not:

>> builtin('struct', obj) 
Warning: Calling STRUCT on an object prevents the object from hiding its implementation details and should 
thus be avoided. Use DISP or DISPLAY to see the visible public details of an object. See 'help struct' for 
more information. 
ans = 
    Width: 0 
    Height: 0 
    Hidden: [] 
     Area: 0 
1
publicProperties = properties(x); 
myStruct = struct(); 
for iField = 1:numel(publicProperties), myStruct.(publicProperties{iField}) = []; end 
0

Amro & DVarga'dan gelen yanıtları birleştirerek, varsayılan bir yapı işlevi genelleştirilebilir:

 function s = struct(self) 
     publicProperties = properties(self); 
     s = struct(); 
     for fi = 1:numel(publicProperties) 
      s.(publicProperties{fi}) = self.(publicProperties{fi}); 
     end     
    end