Fortran 初始化派生类型内联或类型转换
fortran initializing a derived type inline or type casting
我想知道是否有办法在子例程中内联传递派生类型。假设我有一个模块
module test_mod
type a
end type
type b
end type
contains
subroutine test(var)
type(a),intent(in) :: var
...
end subroutine
subroutine test(var)
type(b),intent(in) :: var
...
end subroutine
end module
我可以在哪里实现这个模块,比如
program testTest
use test_mod
call test(type(a)::temp)
! call test(type(a)::temp) ! or
end program
我知道这可以在 c++ 中使用 (double)(i) 之类的东西来完成,但这是一个转换。我对(我猜)初始化派生类型 inline
感兴趣
您使用的语法与该语言不同,但您可以使用结构构造函数。
它是一个returns类型的函数,它与类型同名。每个派生类型都有一个默认类型,您可以通过覆盖通用接口中的类型名称来定义自己的派生类型。默认构造函数的参数是类型组件。
program testTest
use test_mod
call test(a())
end program
您还可以在其他情况下、在复合表达式中或仅在简单赋值的右侧使用构造函数
type :: t
real :: x
end type
type(t) :: o
o = t(1.0)
用户定义的构造函数示例:
type :: t
real :: x
end type
interface t
module procedure my_init
end interface
contains
function my_init(...) result(res)
type(t) :: res
...
end function
我想知道是否有办法在子例程中内联传递派生类型。假设我有一个模块
module test_mod
type a
end type
type b
end type
contains
subroutine test(var)
type(a),intent(in) :: var
...
end subroutine
subroutine test(var)
type(b),intent(in) :: var
...
end subroutine
end module
我可以在哪里实现这个模块,比如
program testTest
use test_mod
call test(type(a)::temp)
! call test(type(a)::temp) ! or
end program
我知道这可以在 c++ 中使用 (double)(i) 之类的东西来完成,但这是一个转换。我对(我猜)初始化派生类型 inline
感兴趣您使用的语法与该语言不同,但您可以使用结构构造函数。
它是一个returns类型的函数,它与类型同名。每个派生类型都有一个默认类型,您可以通过覆盖通用接口中的类型名称来定义自己的派生类型。默认构造函数的参数是类型组件。
program testTest
use test_mod
call test(a())
end program
您还可以在其他情况下、在复合表达式中或仅在简单赋值的右侧使用构造函数
type :: t
real :: x
end type
type(t) :: o
o = t(1.0)
用户定义的构造函数示例:
type :: t
real :: x
end type
interface t
module procedure my_init
end interface
contains
function my_init(...) result(res)
type(t) :: res
...
end function