0
두 가지 이상의 유형에 대해 유형 바인드 프로 시저와 동일한 기능을 사용하는 방법이 있습니까? 예 : 다음과 같은 상황을 상상해보십시오 :유형 바운드 프로 시저의 다형성
module definitions
implicit none
type type1
integer i
contains
procedure,pass :: init1
end type
type type2
integer i
contains
procedure,pass :: init2
end type
contains
subroutine init1(x)
class(type1),intent(inout) :: x
x%i=3
end subroutine
subroutine init2(x)
class(type2),intent(inout) :: x
x%i=3
end subroutine
end module
program test
use definitions
type(type1) ::a
type(type2) ::b
print*, a%i
print*, b%i
call a%init1
print*, a%i
print*, b%i
call b%init2
print*, a%i
print*, b%i
end program
동일한 서브 루틴을 사용했지만 두 번 정의해야합니다. 그래서 저는
class(type1 .or. type2), intent(inout) :: x
또는 이와 비슷한 것을 요청하고 있습니다. 이미 클래스 (*)를 사용해 보았습니다 만, 컴파일러가 x % i로 무엇을 해야할지 모르기 때문에 작동하지 않습니다. 정의되지 않았을 수도 있고, select 타입 블록과 조합되어 있지 않을 수도 있습니다. 실제 프로그램은 더 복잡하기 때문에 유형 정의의 유사한 부분을 병합 한 다음 두 유형을 정의하기 위해 쉽게 확장 할 수 없습니다. 미리 감사드립니다.
예 실제로이 예제에서 문제를 해결,하지만 실제로 나는 내 마지막이 솔루션을 제외하려고 문장. actuall 프로그램에서 함수는 확장에 의존하기 때문에. 이 혼란에 죄송합니다. 그래도 약간의 변화와 함께 그것의 wokring입니다. 그에 따라 게시물을 수정하고 답글로 태그를 지정하겠습니다. – PeMa
이상합니다. 실제로 두 가지 구성 요소로 작업하는 경우에는 자녀 중 한 곳에만 존재합니다. 실제로 두 가지 별도의 절차를 사용해야합니다. 공유 부분이 있으면 기본 절차를 항상 호출 할 수 있습니다. –
구성 요소는 구조가 동일하지만 하위 구성 요소의 전체 구성 요소의 다른 구성 요소에도 의존합니다. 그러나 마침내 나는 그들에게 같은 공식을 적용 할 필요가있다. 이것은 모든면에서 뒤에있는 육체적 인 의미에서도 놀라운 것입니다. 그러나 나는 세부 사항을 여기에서 정말로 기술 할 수 없다. 아직도 꽤 잘 작동하는 것 같습니다. 편집 할 때 '숨겨진'문제가 발생할 것으로 예상되는 경우 해당 내용을 배우는 데 매우 감사하게 생각합니다. – PeMa