首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有泛型函数的Fortran运算符重载

带有泛型函数的Fortran运算符重载
EN

Stack Overflow用户
提问于 2017-05-25 13:41:03
回答 1查看 598关注 0票数 0

我想使用函数的泛型名称来重载'*‘运算符,如下例所示:

代码语言:javascript
代码运行次数:0
运行
复制
interface scala
    module procedure :: scalapr,scalarp
end interface scala
interface operator(*)
   module procedure :: scala
end interface operator(*)

但是,使用gfortran进行编译时,我得到:

代码语言:javascript
代码运行次数:0
运行
复制
Error: Procedure 'scala' in intrinsic '*' operator at (1) is neither function nor subroutine

有什么转机吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-25 13:55:35

必须用特定的函数重载

代码语言:javascript
代码运行次数:0
运行
复制
interface scala
    module procedure :: scalapr,scalarp
end interface scala
interface operator(*)
   module procedure :: scalapr, scalarp
end interface operator(*)

泛型不是模块过程,因此不能出现在module procedure中。

也只有procedure,但这在这里没有帮助。它适用于不是来自当前模块的过程。但不管怎样,通用接口块中的函数必须是特定函数。

请参阅Fortran 2008 12.4.3.4 Generic interfaces

1通用接口块为接口块中的每个过程指定一个通用接口。PROCEDURE语句列出具有此通用接口的过程指针、外部过程、伪过程或模块过程。..。

根据7.1.6:

代码语言:javascript
代码运行次数:0
运行
复制
5 A function defines the binary operation x1 op x2 if
  (2) either
     (a)  a generic interface (12.4.3.2) provides the function with a generic-spec of OPERATOR (op),
  or
     (b)  there is a generic binding (4.5.5) in the declared type 

因此,上面的规则和约束一样适用

过程名(

C1207,R1206)过程名应该是具有显式接口的非内部过程。

通用名称不符合C1207。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44173079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档