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

时间:2017-12-24 08:04:35

标签: fortran private procedure public

假设我首先定义了一个类型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()”是非法的。或者等效地说,我想在扩展一个类时禁用一些函数。

1 个答案:

答案 0 :(得分:1)

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

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

call o%f()

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