小编Fra*_*ank的帖子

Fortran2003:指向函数的过程指针返回指向多态类型的指针

对于一个新项目,我正在考虑使用 Fortran2003 的面向对象特性。我尝试过的一件事涉及一个过程指针,它指向一个函数(不是子例程),该函数返回一个指向多态类型的指针。我想知道这样的构造是否合法,因为我从不同的编译器得到了混合的结果(见下文)。

作为一个具体的例子,考虑以下函数接口:

abstract interface
   function if_new_test(lbls) result(t)
      import :: test_t
      class(test_t),pointer       :: t
      character(len=*),intent(in) :: lbls(:)
   end function if_new_test
end interface
Run Code Online (Sandbox Code Playgroud)

并且使用代码应该有一个过程指针,可以指向具有这个接口的函数:

procedure(if_new_test),pointer :: nt
Run Code Online (Sandbox Code Playgroud)

我在问这是否合法,因为 gfortran (4.7.2) 用消息抱怨这个过程指针声明:

错误:(1) 处的 CLASS 变量“nt”必须是虚拟的、可分配的或指针

我不明白这个错误信息,因为nt它本身是一个指针,它指向的函数返回的也是一个指针。

作为参考,示例的完整源代码如下。第一,包含我的派生类型、接口和函数/子例程的模块:

module test_m

   implicit none

   type :: test_t
      character(len=10) :: label
      contains
      procedure :: print => print_test
   end type test_t

   type,extends(test_t) :: test2_t
      character(len=10) :: label2
      contains
      procedure :: print => print_test2
   end type test2_t

   abstract interface
      function if_new_test(lbls) result(t)
         import :: …
Run Code Online (Sandbox Code Playgroud)

polymorphism fortran pointers fortran2003

6
推荐指数
1
解决办法
1223
查看次数

标签 统计

fortran ×1

fortran2003 ×1

pointers ×1

polymorphism ×1