<Example Program>
Module simple_callback Type callback_object Character(6) :: id = '' Procedure (basic_callback_proc),Pointer :: proc => Null() End Type Contains Subroutine basic_callback_proc(me) Class(callback_object) me If (me%id/='') Then Print *,Trim(me%id),' was called' Else Print *,'Anonymous was called' End If End Subroutine Subroutine stop_program_callback_proc(me) Class(callback_object) me If (me%id/='') Then Print *,'Stop requested by ',me%id Else Print *,'Anonymous stop request' End If Stop 'Program stopped by callback' End Subroutine Subroutine process(cba) Class(callback_object) cba(:) Do i=1,Size(cba) If (Associated(cba(i)%proc)) Then Call cba(i)%proc Else If (cba(i)%id/='') Then Print *,'No action for ',cba(i)%id Else Print *,'No action for anonymous item',i End If End Do End Subroutine End Module Program example Use simple_callback Type(callback_object) x(5) x(1) = callback_object('X1',basic_callback_proc) x(2)%proc => basic_callback_proc x(3)%id = 'Noone' x(5)%id = 'End!' x(5)%proc => stop_program_callback_proc Call process(x) End Program |
|
Execution Results X1 was called Anonymous was called No action for Noone No action for anonymous item 4 Stop requested by End! STOP: Program stopped by callback |