假设我首先定义了一个类型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()”是非法的。或者等效地说,我想在扩展一个类时禁用一些函数。
答案 0 :(得分:1)
很难理解你的描述,但如果我理解正确,那就不可能了。
考虑一下你有一个变量class(A) :: o
。你可以打电话给
call o%f()
class(A)
是多态的,可以是A
的任何扩展类型,因此其动态类型可以是type(B)
。所以B
必须提供可公开访问的程序f
以保持与父母的兼容。