在MATLAB OOP框架中,将对象强制转换为结构可能很有用,即定义一个接受对象并返回具有等效字段的结构的函数。
适当的地方是什么?我可以想到几个选择:
struct
添加到转换为struct的类中,并使构造函数接受结构这两个选项似乎都不是很优雅:第一个意味着关于类本身的逻辑被移动到另一个类。另一方面,在第二种情况下,它会激发用户对任何对象使用struct
函数,这通常会发出警告(structOnObject
)。
是否有替代品?
答案 0 :(得分:1)
就我个人而言,我选择第二种选择,而不用担心会激怒用户在其他课程上调用struct
;您只能担心自己的代码,而不是第三方的代码,即使第三方是MathWorks。在任何情况下,如果他们开始在任意级别上调用struct
,那么它只是一个警告;实际上没有任何危险可能发生,这不是一个好习惯。
但是如果您对此感到担心,您可以随时拨打转换方法toStruct
而不是struct
。或者最好的(尽管稍微复杂一些)方法可能是为您的类重载cast
,接受并处理选项'struct'
,并将任何其他选项传递给builtin('cast',...
。
PS你的问题的标题是指类型转换,但你之后的是 cast 。在MATLAB中,类型转换是一种不同的操作,涉及获取一种类型的确切位并将它们重新解释为另一种类型的位(可能是输出类型的数组)。有关区别的更多信息,请参阅doc cast
和doc typecast
。
答案 1 :(得分:0)
第二种选择听起来好多了。
通过调用
来快速而肮脏的方法来消除警告warning('off', 'MATLAB:structOnObject')
在你的课程开始时。
Sam Roberts的回答中提供的解决方案更加清晰。我个人会选择toStruct()
方法。