Oop 如何使用不同的';使用';陈述
我有一个将数据导出到文件的模块。 它从不同的模块导出相似的数据。 目前,我为每种类型的数据都有一个导出模块,唯一的区别是一行。 下面是一个简单的例子Oop 如何使用不同的';使用';陈述,oop,module,fortran,Oop,Module,Fortran,我有一个将数据导出到文件的模块。 它从不同的模块导出相似的数据。 目前,我为每种类型的数据都有一个导出模块,唯一的区别是一行。 下面是一个简单的例子 module cat contains character(len=10) function name() name = 'Meowser' end function name end module cat module dog contains character(len=10) function name()
module cat
contains
character(len=10) function name()
name = 'Meowser'
end function name
end module cat
module dog
contains
character(len=10) function name()
name = 'Barkster'
end function name
end module dog
module export_cat
use cat
contains
subroutine export_name
print *, name()
end subroutine export_name
end module export_cat
module export_dog
use dog
contains
subroutine export_name
print *, name()
end subroutine export_name
end module export_dog
program main
use export_dog
call export_name
end program main
除了“use”语句外,导出模块完全相同。
我不想维护同一导出模块的多个副本。
是否有办法将导出模块中的子例程添加到所有不同的模块中?这是可以使用INCLUDE完成的
!*************
! common.i90
subroutine export_name
print *, name
end subroutine export_name
!*************
! elsewhere...
module export_cat
use cat
contains
include 'common.i90'
end module export_cat
module export_dog
use dog
contains
include 'common.i90'
end module export_dog
...
请注意,如前所述,每个导出过程都是特定的,在访问两个或多个具有相同名称的特定过程的作用域中会出现名称冲突
~~~
OOP方法(因为您标记了它)通常是定义一个充当猫和狗(可能是动物)的公共父对象的类型,一个对类型为animal的多态参数进行操作的导出过程然后调用一个通过绑定实现特定类型行为的过程
module animals
implicit none
public :: export
type, public, abstract :: animal
contains
procedure(animal_name), deferred, nopass :: name
end type animal
abstract interface
function animal_name()
import animal
implicit none
character(:), allocatable :: animal_name
end function animal_name
end interface
contains
subroutine export(obj)
class(animal), intent(in) :: obj
print *, obj%name()
end subroutine export
end module animals
module cats
use animals
implicit none
private
type, public, extends(animal) :: cat
contains
procedure, nopass :: name
end type cat
contains
function name()
character(:), allocatable :: name
name = 'Meowser'
end function name
end module cats
module dogs
use animals
implicit none
private
type, public, extends(animal) :: dog
contains
procedure, nopass :: name
end type dog
contains
function name()
character(:), allocatable :: name
name = 'Barkster'
end function name
end module dogs
program main
use animals
use cats
use dogs
class(animal), allocatable :: x
x = cat()
call export(x)
end program main
大家好,试着用一个问题标题来描述您的问题,而不仅仅是主题,下面的标签
fortran
和module
已经描述了这个主题。