我试图找出创建替代 C++ 模板或 Java 通用对象的最佳方法。由于几个不同的原因,我过去曾多次想这样做,但是现在我想做的是为几个相关类创建 saveobj 和 loadobj 函数。我的想法是我想要一组通用的例程来创建一个默认结构,然后再进一步操作它以按照我想要的方式获得结构。
我不能简单地使用外部函数,因为我需要访问对象的所有公共(不是问题)和受保护(问题)非瞬态属性才能创建 loadobj 和 saveobj。
然后我考虑使用抽象接口。然而,使用抽象接口给我带来了同样的问题。相同,复制粘贴在我所有目标文件中的代码。因此,我想到了使用某种与多重继承相结合的成熟对象(我的大多数对象已经从接口的基本具体化继承)。我认为使用超类可以让我公开子类受保护的属性,但它似乎不是那样工作的。有什么建议么?
这是保存 obj 方法的多重继承方法(我目前最接近的方法)的示例。
序列化器.m
% Serializer.m
classdef Serializer
methods
function [saveObj] = saveobj( obj )
% Get metadata about the Object
meta = metaclass( obj );
meta = meta.PropertyList;
for p = meta'
if p.Transient | p.Dependent
continue; % Only serialize the correct fields
end
saveobj.(p.Name) = { obj.(p.Name) }; % Serialize
end % for ( property )
end % function ( saveobj )
end % methods
end % classdef ( Serializer )
TestSerializerA.m
% TestSerializerA.m
classdef TestSerializerA < Serializer
properties
PropA = 'a';
end % properties ( public )
properties( Access = protected )
HiddenA = 'ha'
end % properties ( protected )
end % classdef ( TestSerializerA )
TestSerializerB.m
% TestSerializerB.m
classdef TestSerializerB < TestSerializerA & Serializer
properties
PropB = 'b'
end
properties( Access = protected )
HiddenB = 'hb';
end % properties ( protected )
end % classdef ( TestSerializerB )