Fortran 2003中的链式类型绑定过程?

时间:2014-06-06 19:27:20

标签: oop fortran

说我正在为fortran编写一个纸牌游戏。我有一个卡片对象,带有类型绑定程序" getsuit"和一个甲板对象(由一系列卡片组成),带有类型绑定程序" getcard"。

我想要的是能够做一些形式的事情:

deck%getcard%getsuit

然而,当我这样做时,我的编译器告诉我"函数引用不能用作结构组件的最左边的部分-ref,"即使该功能属于"卡。"另一方面,这样做:

card = deck%getcard
card%getsuit

工作正常。必须使用两行和一个额外的变量来实现这一点似乎是令人讨厌的;有什么办法吗?

2 个答案:

答案 0 :(得分:2)

稍微根据你的功能做什么(这里假设它们或多或少是纯粹的)你可以使用用户定义的运算符。

the_suit = .SuitOf. (.CardFrom. deck)

答案 1 :(得分:2)

ISO / IEC 1539-1:2010 a.k.a Fortran 2008在第6.4.2节中说明

  

R611 data-ref part-ref [% part-ref ] ...
   R612 part-ref part-name [( section-subscript-list )] [图片-selector ]
   C609(R611)除最右边之外的每个部件名称应为派生类型
   C610(R611)除最左边之外的每个部件名称应为前面部件名

的声明类型的组件名称

这意味着结构引用的每个组件必须是前一个组件的数据成员。 part-name ()的容差是允许索引到数组成员,不允许函数。函数返回派生类型不符合 part-ref 的规范,因此不是有效的Fortran,它适合您的编译器投诉。

但你可以这样做:

deck%card(i)%suit 
假设卡是属于甲板的卡片阵列,而西装是属于卡片的类型。