Fortran中能否修改Type-bound Procedures的可访问性并在指定程序内设为私有?
现有代码片段
MODULE MyTypeMod TYPE MyType PRIVATE INTEGER, ALLOCATABLE :: Num CONTAINS PROCEDURE, PUBLIC :: IsNum!To check Allocation of Num ... END TYPE MyType CONTAINS ... END MODULE MyTypeMod
PROGRAM testMyType USE MyTypeMod, ONLY : MyType ... END PROGRAM testMyType
问题解答
1. 是否可以修改类型绑定过程IsNum的可访问性状态?
- 类型绑定过程的可访问性属性仅能在定义该类型的模块(也就是此处的
MyTypeMod)内部修改,模块外部没有修改权限。 - 你当前代码中在
MyType类型定义内已经给IsNum指定了PUBLIC属性,如果要调整它的可访问性,只需回到MyTypeMod模块内,将PROCEDURE, PUBLIC :: IsNum修改为PROCEDURE, PRIVATE :: IsNum即可,修改后所有引用该模块的代码都无法直接访问IsNum过程。
2. 是否可以仅在testMyType程序中将IsNum过程设置为PRIVATE?
- 不可以,核心原因有两点:
- Fortran中的
PRIVATE/PUBLIC访问性控制语句仅能在模块、子模块的声明作用域内使用,主程序testMyType的作用域不支持通过访问性声明修改导入实体的权限。 IsNum是MyType的公有绑定过程,它的访问性是由模块中类型的定义决定的固有属性,不会随引用位置的不同而改变。哪怕你在USE语句中只导入MyType,只要你在主程序中创建了MyType的实例,就可以调用该实例的公有IsNum过程,无法在主程序中单独屏蔽这个过程的访问权限。
- Fortran中的
内容的提问来源于stack exchange,提问作者Akhil Akkapelli
相关产品推荐
相关产品推荐

