在MATLAB OOP中定义类型转换的结构?

时间:2017-07-18 08:06:16

标签: matlab oop casting

在MATLAB OOP框架中,将对象强制转换为结构可能很有用,即定义一个接受对象并返回具有等效字段的结构的函数。

适当的地方是什么?我可以想到几个选择:

  • 构建一个单独的转换器对象,负责处理各个类之间的转换
  • 将函数struct添加到转换为struct的类中,并使构造函数接受结构

这两个选项似乎都不是很优雅:第一个意味着关于类本身的逻辑被移动到另一个类。另一方面,在第二种情况下,它会激发用户对任何对象使用struct函数,这通常会发出警告(structOnObject)。

是否有替代品?

2 个答案:

答案 0 :(得分:1)

就我个人而言,我选择第二种选择,而不用担心会激怒用户在其他课程上调用struct;您只能担心自己的代码,而不是第三方的代码,即使第三方是MathWorks。在任何情况下,如果他们开始在任意级别上调用struct,那么它只是一个警告;实际上没有任何危险可能发生,这不是一个好习惯。

但是如果您对此感到担心,您可以随时拨打转换方法toStruct而不是struct。或者最好的(尽管稍微复杂一些)方法可能是为您的类重载cast,接受并处理选项'struct',并将任何其他选项传递给builtin('cast',...

PS你的问题的标题是指类型转换,但你之后的是 cast 。在MATLAB中,类型转换是一种不同的操作,涉及获取一种类型的确切位并将它们重新解释为另一种类型的位(可能是输出类型的数组)。有关区别的更多信息,请参阅doc castdoc typecast

答案 1 :(得分:0)

第二种选择听起来好多了。

通过调用

来快速而肮脏的方法来消除警告
warning('off', 'MATLAB:structOnObject')

在你的课程开始时。

Sam Roberts的回答中提供的解决方案更加清晰。我个人会选择toStruct()方法。