在Fortran中,在扩展定义中,如何将公共过程设置为私有?

问题描述 投票:1回答:1

假设我首先定义了一个类型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()”是非法的。或者等效地说,我想在扩展一个类时禁用一些函数。

fortran private procedure public
1个回答
1
投票

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

考虑你有一个变量class(A) :: o。你可以打电话

call o%f()

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

© www.soinside.com 2019 - 2024. All rights reserved.