interface assignment 和interface operator写为type-bound procedure形式
使用interface assignment 以及interface operator可以为type定义操作符和赋值符;但是如何将其写为type-bound procedure的形式呢?
这个是书本的例子,但是肯定是错误的,至少没有用procedure语句声明assign1,plus1,plus2,plus3;
另外即便绑定之后还存在passed-object dummy argument的问题。
似乎这一块跟面向对象关系挺大,不是很明白,还请教懂的大神告知如何操作?
就像书上的例子就可以了。
加上 Procedure :: assign1,plus1,plus2,plus3 但是后面很奇怪啊,这是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了;
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questions/5502592/procedure-pointer-derived-type
http://stackoverflow.com/questions/30005413/overriding-a-procedure-with-nopass-attribute-in-fortran
个人看法:
没有面向对象编程OOP基础,选择fortran来上手,无异于开奇瑞QQ车去参加F1大赛 pasuka 发表于 2016-4-21 09:48
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questions/5502592/procedure-po ...
谢谢大神给的参考,确实很有帮助。
如您所说,这里还真就是OOP的问题,确实超出我现有能力了,所以暂时放下这个,不去纠结了。
fortran学了快两年,还差指针和oop没学···
没办法,本人有繁重的任务,抽空才能学点新东西,磨刀的时间都过去了。。
页:
[1]