在哪里定义类型转换到 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 castdoc typecast

【讨论】:

【参考方案2】:

第二个选项对我来说听起来好多了。

消除警告的一种快速而肮脏的方法是通过调用来禁用它

warning('off', 'MATLAB:structOnObject')

在程序开始时。

Sam Roberts 的回答中提供的解决方案要干净得多。我个人会选择toStruct() 方法。

【讨论】:

以上是关于在哪里定义类型转换到 MATLAB OOP 中的结构?的主要内容,如果未能解决你的问题,请参考以下文章

C++中 OOP相关的类型转换

syms在matlab中的作用

所有(OOP)依赖项的根存储在哪里?

matlab cell中的元素类型转换

MATLAB的数值型数据类型有哪些,分别怎么表示

matlab 为啥要进行数据类型转换?