假设我首先定义了一个类型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
以保持与父母的兼容。