Я хотел бы знать, как создать функцию, которая возвращает вещественное число, целое число или строку.
Например, вызов будет write(*,*)dt%get()
, где get()
будет возвращаться:
- целое число, если
dt%isInteger = .true.
- реальный, если
dt%isReal = .true.
- символ, если
dt%isStr = .true.
Я полагаю, что это возможно, если использовать абстрактный интерфейс, чтобы процедура get()
указывала на любую процедуру getInteger()
, getReal()
или getStr()
, но определение абстрактного интерфейса должно определять тип вывода, который в моем случае является переменным.
Вот соответствующий код:
type :: dt
real(dp) :: realValue
integer :: integerValue
character(*) :: strValue
logical :: isReal, isInteger, isStr
procedure(intf), pointer :: get
contains
procedure :: getReal, getInteger, getStr
end type
abstract interface
function intf(self)
import dt
class(dt) :: self
??? :: intf
end function
end interface
Есть идеи ?