Fortran Coder

标题: interface assignment 和interface operator写为type-bound procedure形式 [打印本页]

作者: wx_G5fH8Rhq    时间: 2016-4-20 15:20
标题: interface assignment 和interface operator写为type-bound procedure形式
使用interface assignment 以及interface operator可以为type定义操作符和赋值符;
但是如何将其写为type-bound procedure的形式呢?

这个是书本的例子,但是肯定是错误的,至少没有用procedure语句声明assign1,plus1,plus2,plus3;
另外即便绑定之后还存在passed-object dummy argument的问题。
似乎这一块跟面向对象关系挺大,不是很明白,还请教懂的大神告知如何操作?


作者: fcode    时间: 2016-4-20 17:06
就像书上的例子就可以了。
加上 Procedure :: assign1,plus1,plus2,plus3
作者: wx_G5fH8Rhq    时间: 2016-4-21 08:55
但是后面很奇怪啊,这是IVF14.0的手册,不能有nopass属性,我就理解成必须有pass属性

一个操作符必须有pass属性我是着实没明白意图。最后只能这样
type::vector
    real::x
    real::y
    real::z
    contains
    ! type bounded procedures
    generic::assignment(=)=>array_to_vector,vector_to_array
    generic::operator(+)=>vector_add
    generic::operator(-)=>vector_subtract
    generic::operator(*)=>vector_times_real,real_times_vector,vector_times_int,int_times_vector,cross_product
    generic::operator(/)=>vector_div_real,vector_div_int
    generic::operator(.dot.)=>dot_product_
    procedure,pass(vec_result)::array_to_vector
    procedure,pass(vec_1)::vector_to_array
    procedure,pass(vec_1)::vector_add
    procedure,pass(vec_1)::vector_subtract
    procedure,pass(vec_1)::vector_times_real
    procedure,pass(vec_2)::real_times_vector
    procedure,pass(vec_1)::vector_times_int
    procedure,pass(vec_2)::int_times_vector
    procedure,pass(vec_1)::cross_product
    procedure,pass(vec_1)::vector_div_real
    procedure,pass(vec_1)::vector_div_int
    procedure,pass(vec_1)::dot_product_
end type

因为本类型可以在第一个形参也可以是第二个上面,这样可以过编译,但是用起来还不如interface operator了;

作者: pasuka    时间: 2016-4-21 09:48
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questio ... ointer-derived-type
http://stackoverflow.com/questio ... ttribute-in-fortran
个人看法:
没有面向对象编程OOP基础,选择fortran来上手,无异于开奇瑞QQ车去参加F1大赛
作者: wx_G5fH8Rhq    时间: 2016-4-21 10:14
pasuka 发表于 2016-4-21 09:48
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questions/5502592/procedure-po ...

谢谢大神给的参考,确实很有帮助。
如您所说,这里还真就是OOP的问题,确实超出我现有能力了,所以暂时放下这个,不去纠结了。
fortran学了快两年,还差指针和oop没学···
没办法,本人有繁重的任务,抽空才能学点新东西,磨刀的时间都过去了。。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2