在一个Fortran模块我有一个函数,它的阵列和它的名称,从一个数据库中获取(实际调用C函数)的阵列的形状,复制阵列在临时缓冲器中,并传递缓冲到另一个C函数流程它。 此Fortran函数的名称为fs_WriteData_i整数数据,fs_WriteData_f真正和fs_WriteData_d为双精度。 所有这些函数接受不仅一维数组,而且2D,3D和4D阵列和他们很好地工作。 这里遵循这些子程序的一个界面:
subroutine fs_WriteData_d(fieldname, data)
use, intrinsic :: iso_c_binding
implicit none
real(c_double), dimension(*) :: data
character :: fieldname*(*)
! ...
end subroutine fs_WriteData_d
如果用户调用fs_WriteData_d('name', data)
与数据是一个双精度,最多4维数组,该子程序完成这项工作。
现在,这个问题:我想提供一个共同的重载接口称为fs_WriteData,所以我用
interface fs_WriteData
module procedure fs_WriteData_i, &
fs_WriteData_f, &
fs_WriteData_d
end interface fs_WriteData
不幸的是,这并不工作:编译器说,它无法找到正确的执行,如果用户只是调用fs_WriteData('name', data)
,并且因为所有这些功能的等级不匹配这一点。
有一个聪明的办法,以避免为了使模块更易于维护与一样的内容写入所有fs_WriteData_d_1d,fs_WriteData_d_2d,...子程序?
提前谢谢了。