【发布时间】:2018-07-13 11:47:00
【问题描述】:
我正在尝试在不同的派生类型之间添加转换函数。我是 希望它们成为返回另一个派生类型的第一个派生类型的函数。只要它们在同一个文件和模块中,这没有问题。但我真的希望它们能够被分成多个文件,否则它将是一个非常大的文件。由于依赖关系以及 Fortran 中缺少命名空间,我无法弄清楚如何执行此操作。
有没有办法做到这一点?
这是我希望将其分成两个文件(每个派生类型一个)的示例。
Module ConversionStuff
implicit none
type A_T
real :: a, b, c
contains
procedure :: toX => a_toX
end type A_T
type X_T
real :: x, y, z
contains
procedure :: toA => x_toA
end type X_T
contains
function a_toX(this) result(x)
class(A_T), intent(inout) :: this
type(X_T) :: x
x%x = this%a * 2
x%y = this%b * 2
x%z = this%c * 2
end function a_toX
function x_toA(this) result(a)
class(X_T), intent(inout) :: this
type(A_T) :: a
a%a = this%x * 0.5
a%b = this%y * 0.5
a%c = this%z * 0.5
end function x_toA
End Module ConversionStuff
如果有错别字,我深表歉意。我没有在这台计算机上编译 Fortran 的简单方法。
【问题讨论】:
-
你知道子模块吗?
-
我是;但是,我还没有使用具有该功能的编译器(希望很快)。不过,我没想到会解决这个问题。我可能错误地假设子模块仍将单独编译,因此留下循环依赖
-
我不是问,因为我认为他们解决了你的问题,而是想看看你是否已经排除了他们。 (如果你有没有必要进一步思考。)
-
我没有排除它,但我认为它不会解决问题。
标签: class module namespaces fortran