Создание полей свойства struct как свойств класса в Matlab

Мне нужно определить класс с именем MobileBaseStation и свойство DataChannel, которое представляет собой структуру, как показано ниже,

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 частный, так что вы можете контролировать доступ через зависимые методы получения и установки собственности, например:

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
Другие вопросы по тегам