【发布时间】:2013-02-22 06:23:30
【问题描述】:
我在 Fortran 2003 中编写了一些代码,这些代码使用稀疏矩阵处理大量线性代数。我正在尝试利用新标准的一些更抽象的特性,这样我的程序就更简单了,没有太多重复的代码。
我有一个过程solver,它接受一个矩阵、一些向量、所使用的迭代方法的容差等。我将一个指向名为matvec 的过程的指针传递给它; matvec 是我们用于矩阵向量乘法的子程序。
问题是,有时matvec 是一个过程,它接收额外的参数colorlist, color1, color2,高于通常发送到此过程的参数。我可以想出几种方法来解决这个问题。
第一个想法:定义两个不同的抽象接口matvec1、matvec2和两个不同的求解器。这可行,但这意味着复制一些代码,这正是我试图避免的。
另一个想法:保持相同的抽象接口matvec,并使额外的参数colorlist、color1、color2可选。这意味着使它们在每个 matvec 例程中都是可选的——即使是那些它们并不是真正可选的,以及它们甚至根本不使用的例程。如果我这样做,我肯定会下地狱的。
我能想到很多其他不太理想的解决方案。我想对此提出一些意见 - 我确信有一些优雅的方法可以做到这一点,我只是不确定它是什么。
【问题讨论】:
标签: oop polymorphism fortran