fortran - 在Fortran中,在扩展定义时,如何将公共(public)过程设置为私有(private)?

标签 fortran private procedure public

假设我首先定义了一个类型 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/

相关文章:

java - 使用反射设置私有(private)字段适用于静态或最终,但不适用于静态最终(组合)

c# - 从另一个文件访问私有(private)类

Mysql程序自增变量

r - 如何从 Fortran 调用 R 函数?

optimization - 提高速度

java - 带有继承的Java程序应该如何追溯?

mysql - 在mysql中将varchar字符串数据转换为时间格式

mysql - 在过程中创建事件 - SQL

c++ - 将不带复制构造函数的类的成员函数指针传递给 Fortran

fortran - 无法在派生类型中打印可分配的分配状态