代码之家  ›  专栏  ›  技术社区  ›  hengyue li

如何获得不同类型的模块以进行代码重用?

  •  0
  • hengyue li  · 技术社区  · 7 年前

    现在我有两个模块。这两个模块中的功能完全相同,但其中一个模块都是关于处理实数类型的,而另一个模块是关于复杂类型的。所有这些模块将在一个程序中使用,因此根据不同的参数输入,我们需要选择不同的模块。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Vladimir F Героям слава    7 年前

    这是下一个(2020年?)的辩论主题Fortran标准。在当前版本中,无法参数化Fortran模块。许多人认为这是一个很大的缺陷(参见comp.lang.fortran上的讨论)。

    您可以使用预处理器(通常是C预处理器)并包含文件。将类型定义为包含文件中的宏名称

      MYTYPE :: x
    

    #define MYTYPE real
    #include "module-template.F90"
    #undef MYTYPE
    
    #define MYTYPE complex
    #include "module-template.F90"
    #undef MYTYPE
    

     gfortran -cpp
     ifort -fpp
    

    和类似(请参阅编译器手册)。

    https://github.com/LadaF/PoisFFT/blob/master/src/fft-inc.f90

    包含在

    https://github.com/LadaF/PoisFFT/blob/master/src/fft.f90

    mod_real mod_complex 。您可以类似于示例执行此操作,也可以使用宏连接生成模块名称。看见 C preprocessor macro: concatenation (example for Fortan90) Concatenate strings in a macro using gfortran