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