在Fortran中,在定义扩展时,如何将一个public过程设置为private?

In Fortran, when in extension definition, how to set a public procedure into private?

假设我首先定义了一个类型 A,其中定义了一个 public 过程 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 

我希望 "call Ob%f()" 是非法的。或者等价地说,我想在扩展 class.

时禁止某些功能

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

假设您有一个变量 class(A) :: o。您可以拨打

call o%f()

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