这里有没有一个好方法可以让用户既保留属性的访问控制又重载索引方法?(matlab 2020a)

问题描述 投票:0回答:1

假设类中的成员具有私有访问属性,即 GetAccess=private,如果我们使用“.”在重载的 subsref 方法中对该成员进行类型引用,则该成员的访问属性此时将变得无效。

--------------------- 那么,有没有一个好方法可以让用户既保留对属性的访问控制又重载索引方法呢?

matlab operator-overloading overloading overload-resolution matlab-class
1个回答
0
投票

如果您想重载

()
和/或
{}
索引而不影响
.
索引,您可以使用以下内容启动
subsref
函数:

if isequal(s(1).type, '.')
    [varargout{1:nargout}] = builtin('subsref',obj,s);
end

如果第一个索引操作是

.
,这只会调用索引的内置(默认)实现。

当然,您也可以将这部分作为标准

switch
声明:

function varargout = subsref(obj,s)
   switch s(1).type
      case '.'
         [varargout{1:nargout}] = builtin('subsref',obj,s);
      case '()'
         ...
      case '{}'
         ...
      otherwise
         error('Not a valid indexing expression')

参考:https://www.mathworks.com/help/matlab/matlab_oop/code-patterns-for-subsref-and-subsasgn-methods.html

© www.soinside.com 2019 - 2024. All rights reserved.