0
私は以下のいずれかが標準で許可されているのに対し、他のものは許可されていない理由を理解しようとしています。彼らは私にとっては定型的なコードを除いて異なって見えません。私は何か誤解しているような気がしたり、より良いやり方があるように感じます。どんな助けもありがとう。返される多態性クラス
不可:
可real :: x
class(*) :: temp
x = 4
temp = genericAssignment(x)
select type(temp)
type is(real)
write(*,*) temp
end select
contains
function genericAssignment(a) result(b)
class(*) :: a
class(*) :: b
allocate(b, source=a)
end function genericAssignment
:
Type GenericContainer
class(*), pointer :: gen
End Type
real :: x
class(*) :: ptr
type(GenericContainer) :: temp
x = 4
temp = genericAssignment(x)
select type(ptr => temp%gen)
type is(real)
write(*,*) ptr
end select
contains
function genericAssignment(a) result(b)
class(*) :: a
type(GenericContainer) :: b
allocate(b%gen, source=a)
end function genericAssignment
私のコンパイラではないのFortran 2008の情報をありがとうまだその機能を持っていますが、最終的に途中であることを知ってうれしいです。上記の例では、コードセクション全体が無意味なので、何か生産的なことを行う限りです。私の質問を説明するのは簡単な例に過ぎませんでした。関数の便利なバージョンは、子タイプのホストの親クラス部分に対して大きな変更を行うことです。 –
たとえば、私はさまざまな座標フレームのホストを扱います。私は親の型(位置、速度、加速度)を持っていますが、間違ったフレームを座標変換関数に渡す可能性を排除するために、それぞれの座標フレームに独自の子タイプを与えることにしました。関連する参照データを保持する能力。私は右利きのフレームを取り、左利きのフレームを返す関数を持っています。私はすべての子供のための関数の単一のコピーを持っているだけであることを好むだろう。それは悪いオーバーヘッドなしで、fortranでは可能ではないようです。 –
Aaaaaaand ....私はちょうど上記のコメントで私の例を行う方法を考え出した。私が認めることよりはるかに長い時間が経過した後、私はchild%parent = parentModifyingFunction()を使うことができ、多くの場合、ポリモーフィックなクラスを返すための工夫を気にする必要はありません。 –