我正在寻找有关如何构建一些FORTRAN库的一些建议。我有各种各样的程序,它们具有相似但不同的数据结构,并希望在公共库中使用这些结构,以避免重复代码。
选项:
通过强制包含任何应用程序所需的所有字段的公共定义,强制数据结构相同。感觉就像一个糟糕的决定,因为数据结构的使用因程序而异。
使用继承并为每个定义的类型设置一个共同的祖先,以便只包含公共库所需的字段。不错,但强制共同的单继承树。
使用C#意义上的接口,其中保证已建立的相关字段组但不需要祖先。听起来不错,但不确定FORTRAN是否可行。
找一个将FORTRAN转换为C#的魔术转换器程序。我过去的测试发现,这可能"是可能的,但生成的代码会被修复并且难以维护。
手动转换为其他语言。这很诱人,但代码库太大,手动迁移需要数年时间。
其他的东西。
非常感谢任何建议或指导。
谢谢,
答案 0 :(得分:1)
如果不希望从抽象类型(#2)进行公共继承,那么典型的方法是编写类型,使它们具有必要的接口一致性,然后将公共代码放在一个单独的文件中是使用INCLUDE文件引入的。可以使用USE重命名和隐式类型之类的东西来实现类型参数化。
这是你的#3的近似值。
"使用重命名"指的是将USE语句中的实体重命名为与USE< d; dd模块中的实体名称不同的能力。这允许你做...
USE some_module, ONLY: name_wanted_by_included_source => original_name
INCLUDE 'some_source'
然后包含的源与name_wanted_by_included_source
一起使用,无论原始代码中的实体名称是什么。
隐式输入可以用来做类似的事情,通常与隐式输入有关:
IMPLICIT TYPE(my_type_name)(Q)
INCLUDE 'some_other_source'
some_other_source中以字母Q开头(未另行声明)的任何实体都属于my_type_name
类型。
有些人使用Fortran外部的工具(例如C预处理器或PyF95 ++)来进行类似的代码模板化。