Fortranモジュールには、配列とその名前を取り、データベースから(実際にはC関数を呼び出して)配列の形状を取得し、配列を一時バッファーにコピーし、バッファーを処理する別のC関数に渡す関数がありますそれ。この Fortran 関数の名前は、整数データの場合は fs_WriteData_i、実数の場合は fs_WriteData_f、倍精度の場合は fs_WriteData_d です。これらの関数はすべて、1 次元配列だけでなく、2D、3D、および 4D 配列も受け入れ、完全に機能します。これらのサブルーチンの 1 つのインターフェイスは次のとおりです。
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、... サブルーチンをまったく同じ内容で書くことを避ける賢明な方法はありますか?
よろしくお願いします。