在Fortran中,在扩展定义中,如何将公共过程设置为私有?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Fortran中,在扩展定义中,如何将公共过程设置为私有?相关的知识,希望对你有一定的参考价值。

假设我首先定义了一个类型A,其中定义了一个公共过程f,也可以绑定到A.在另一个模块中,我将此类型扩展为B.但是,当我使用类型B时,我不希望f为裸露。顺便说一句,我不想​​使用submod技术。

补充:

假设类型(A)已经定义:

module mA 
type::A
 ...
 contains 
 procedure::f
endtype
endmodule

在另一个模块B中,我们将A扩展为:

module mB 
use mA
type,extends(A)::B
 ...
endtype
endmodule

在此模块中,仍可使用f。但是,接下来,在模块mC中我将使用(声明)

type(B)::Ob 

我希望“拨打Ob%f()”是非法的。或者等效地说,我想在扩展一个类时禁用一些函数。

答案

很难理解你的描述,但如果我理解正确,那是不可能的。

考虑你有一个变量class(A) :: o。你可以打电话

call o%f()

class(A)是多态的,可以是任何扩展类型的A,所以它的动态类型可以是type(B)。所以B必须提供可公开访问的程序f以保持与父母的兼容。

以上是关于在Fortran中,在扩展定义中,如何将公共过程设置为私有?的主要内容,如果未能解决你的问题,请参考以下文章

FORTRAN中如何定义全局变量

fortran 字符串太长 如何换行

如何将 c 标头中定义的结构用于 fortran?

OpenMP 的全局变量

并行 fortran 程序将在某个时间休眠

将接口模块过程从fortran导入C