나는 자신의 코드가 같은 것을 목표로하기 때문에 Metcalf 외의 "Fortran 95/2003 explain"의 예제를 사용한다.추상 형식을 확장하는 파생 형식의 연산자를 어떻게 오버로드합니까?
type, abstract :: my_numeric_type
contains
private
procedure(op2), deferred :: add
generic, public :: operator(+) => add
end type
abstract interface
function op2(a,b) result (r)
import :: my_numeric_type
class(my_numeric type), intent(in) :: a,b
class(my_numeric type), allocatable :: r
end function op2
end interface
type, extends(my_numeric_type) :: my_integer
integer, private :: value
contains
procedure :: add => add_my_integer
end type
이제 내 질문에 내가 제대로 add_my_integer
기능을 구현합니까 방법이다. 형식 바인딩 된 프로 시저이므로 첫 번째 인수를 my_integer
으로 캐스팅해야하지만 두 번째 인수는 추상 인터페이스와 호환되도록 my_numeric_type
이어야합니다. 그 결과로 r
을 my_integer
에 할당해야합니까? 여기에 내가 지금까지 무엇을 생각해 냈지, 컴파일,하지만 그것은 항상 이상한 유형을 확인하는 것, 그리고 그것은 (아마도 내 코드와 함께 다른 문제로 인해) 세분화 오류가 발생합니다.
function add_my_integer(a,b) result(r)
class(my_integer), intent(in) :: a
class(my_numeric_type), intent(in) :: b
class(my_numeric_type), allocatable :: r
allocate(my_integer :: r)
select type (b)
type is (my_integer)
r = a+b
end select
end function
어떤 컴파일러를 사용해 보셨습니까? –
최신 버전. – tiam