我在Fortran 2003中編寫了一些代碼,它使用稀疏矩陣做了很多線性代數。我試圖利用新標準的一些更抽象的特性,所以我有更簡單的程序,沒有太多重複的代碼。Fortran 2003中的運行時多態性
我有一個程序solver
它需要一個矩陣,一些向量,使用的迭代方法的容差等等。我將一個指針傳遞給一個名爲matvec
的程序; matvec
是我們用於矩陣向量乘法的子程序。
問題是,有時matvec
是一個過程,其中發送到此過程通常的一個以上的額外參數colorlist, color1, color2
。我可以想到處理這個問題的幾種方法。
第一個想法:定義兩個不同的抽象接口matvec1
,matvec2
和兩個不同的求解器。這有效,但它意味着重複一些代碼,這正是我想要避免的。
另一個想法:保持同樣的抽象接口matvec
,使額外的參數,color1
,color2
可選。這意味着在每個matvec例程中使它們成爲可選項 - 即使它們不是真正可選的,也不適用於它們甚至不被使用的例程。很確定,如果我這樣做,我會下地獄。
我能想到很多其他不太理想的解決方案。我想就此提出一些意見 - 我確定有一些優雅的方式可以做到,但我不確定它是什麼。