在哪里定义类型转换到 MATLAB OOP 中的结构?
Posted
技术标签:
【中文标题】在哪里定义类型转换到 MATLAB OOP 中的结构?【英文标题】:Where to define typecast to struct in MATLAB OOP? 【发布时间】:2017-07-18 08:06:16 【问题描述】:在 MATLAB OOP 框架中,将对象强制转换为结构会很有用,即定义一个函数,该函数接受一个对象并返回一个具有等效字段的结构。
执行此操作的合适位置是什么?我可以想到几个选项:
构建一个单独的转换器对象来处理各种类之间的转换 将函数struct
添加到进行结构转换的类中,并使构造函数接受结构
这两个选项似乎都不是很优雅:第一个意味着关于类本身的逻辑被移动到另一个类。另一方面,在第二种情况下,它会促使用户对 any 对象使用struct
函数,这通常会给出警告(structOnObject
)。
有其他选择吗?
【问题讨论】:
【参考方案1】:我个人会选择第二个选项,而不用担心会激怒用户在其他课程上调用struct
;即使第三方是 MathWorks,您也只能担心自己的代码,而不是第三方的代码。无论如何,如果他们确实开始在任意类上调用struct
,那只是一个警告;不会发生任何真正危险的事情,这不是一个好习惯。
但如果您对此感到担忧,您可以随时调用您的转换器方法toStruct
而不是struct
。或者,最好的(虽然稍微复杂一点)方法可能是为您的班级重载cast
,接受并处理选项'struct'
,并将任何其他选项传递给builtin('cast',...
。
PS 你的问题的标题是指typecasting,但你在这里之后是casting。在 MATLAB 中,类型转换是一种不同的操作,涉及获取一种类型的确切位并将它们重新解释为另一种类型的位(可能是输出类型的数组)。有关区别的更多信息,请参阅 doc cast
和 doc typecast
。
【讨论】:
【参考方案2】:第二个选项对我来说听起来好多了。
消除警告的一种快速而肮脏的方法是通过调用来禁用它
warning('off', 'MATLAB:structOnObject')
在程序开始时。
Sam Roberts 的回答中提供的解决方案要干净得多。我个人会选择toStruct()
方法。
【讨论】:
以上是关于在哪里定义类型转换到 MATLAB OOP 中的结构?的主要内容,如果未能解决你的问题,请参考以下文章