2016-02-16 4 views
0

мне нужно определить класс, называемый MobileBaseStation и свойство DataChannel, который является структурой, как показано ниже,Создание полого свойства структуры как свойства класса в Matlab

classdef MobileBaseStation 
properties 
    DataChannel = struct('TxScheme','SpatialMux','NLayers',4); 
end 
properties (Constant = true) 
    supportedTxSchemes = {'Port0','TxDiversity','CDD','SpatialMux','MultiUser','Port5','Port7-8','Port8','Port7-14'}; 
end 
methods 
    function this = MobileBaseStation(this,TxSchemeChoice,NLayers) 
     this.DataChannel.TxScheme = TxSchemeChoice; 
     this.DataChannel.NLayers = NLayers; 
    end 
    function this = set.DataChannel.TxScheme(this,value) 
     if ismember(value,this.supportedTxSchemes) 
      this.DataChannel.TxScheme = value; 
     end 
    end 
    function this = set.DataChannel.NLayers(this,value) 
     if strcmpi(this.TxScheme,'Port8') && value==1 
      set.DataChannel.NLayers = value; 
     end 
    end 
end 
end 

Сеттеров необходимы для применять ограничения/ограничения для полей структуры DataChannel. Я хочу, чтобы поля структуры были свойствами класса MobileBaseStation, чтобы я мог использовать сеттеры. Как я могу достичь этого в Matlab?

+1

создать новый класс для 'DataChannel' и сделать этот класс свойство ваш класс «MobileBaseStation» –

ответ

0

Я думаю, что вы хотите сделать DataChannel частными, так что вы можете контролировать доступ через ваши зависимые добытчик собственности & сеттеров, например:

classdef MobileBaseStation 
    properties(GetAccess=private, SetAccess=private) 
     DataChannel = struct('TxScheme','SpatialMux','NLayers',4); 
    end 

    ... 

    properties(Dependent=true) 
     TxScheme; 
     NLayers; 
    end 

    methods 
     function v = get.TxScheme(this), v = this.DataChannel.TxScheme; end 
     function v = get.NLayers(this), v = this.DataChannel.NLayers; end 

     function this = set.TxScheme(this,v) 
      assert(ismember(v,this.supportedTxSchemes),'Invalid TxScheme - %s.',v); 
      this.DataChannel.TxScheme = v; 
     end 

     ... 
    end 
end