假设我首先定义了一个类型 A,其中定义了公共(public)过程 f,并且也可以绑定(bind)到 A。在另一个模块中,我将此类型扩展为 B。但是,当我使用类型 B 时,我不希望f 被暴露。 顺便说一句,我不想使用 submod 技术。
补充:
假设 type(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
我希望“call Ob%f()”是非法的。或者说,我想在扩展一个类时禁止某些功能。
最佳答案
很难理解你的描述,但如果我理解正确的话,这是不可能的。
假设您有一个变量class(A)::o
。您可以调用
call o%f()
class(A)
是多态的,可以是 A
的任何扩展类型,因此其动态类型可以是 type(B)
。因此 B
必须提供可公开访问的过程 f
以保持与父级的兼容。
关于fortran - 在Fortran中,在扩展定义时,如何将公共(public)过程设置为私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47959048/