我只是在整理并尝试清理一些使用HDF5库的Fortran代码。在该库中,有一个定义如下的函数:
SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, dims, hdferr, &
mem_space_id, file_space_id, xfer_prp)
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
TYPE, INTENT(IN) :: buf ! Data buffer; may be a scalar
! or an array
...
此处的键输入为buf
。我的代码中有很多不同的部分都使用此子例程,而包装子例程仅相差一行,而输入类型不同,所以我想对代码进行一些概括。我所有调用此子程序的唯一区别是mem_type_id
和传递给buf
的值的实际类型。例如,在一个呼叫中,mem_type_id
是H5T_NATIVE_CHARACTER
,而buf
是字符串,而在另一个呼叫中,mem_type_id
是H5T_NATIVE_REAL
,而buf
是{ {1}}。
我试图复制其子例程声明中的内容,因此我将有一个“类型”输入,但无法编译。
real
有没有一种方法可以满足我的需求?在任何其他语言中,我都会将其描述为希望输入 subroutine StoreDataIntoH5File (vname, vval, mem_type_id)
character, intent (in) :: vname*(*)
type, intent (in) :: vval ! use generic type statement
integer(HID_T), intent(in) :: mem_type_id ! Memory datatype identifier
...
call h5dwrite_f (dset_id, mem_type_id, vval, (/1_HSIZE_T/), hdf5_error)
类型,或者在C语言中,我可能会使用object
。基本上,此API似乎能够采用通用输入类型,而我正在尝试复制该类型,因为我的子例程正在包装它。
我很高兴走指针路线,基本上我只是想能够为各种输入变量类型共享此子例程,就像它调用的子例程(void*
)一样。 / p>
答案 0 :(得分:0)
在HDF5中,对于所有参数组合,Fortran绑定均过载。您可以执行相同的操作(重载时重复代码),也可以自行处理对C HDF5库的调用。我建议前一种解决方案! (可以通过遍历参数组合来实现自动化)。