Fortran 2003 では、抽象型のコンポーネントを持つ構造型を定義できますか? たとえば、次のように、 typeSup
のコンポーネントo_Abst
を持つ型を定義したいとしますAbst
。
TYPE, ABSTRACT :: Abst
CONTAINS
PROCEDURE(some_proc), deferred, pass :: some_proc
..
END TYPE Abst
TYPE :: Sup
PRIVATE
CLASS(Abst) :: o_Abst
..
CONTAINS
PROCEDURE :: another_proc
END TYPE Sup
私がすでに遭遇した問題の 1 つは、Sup
型オブジェクトのコンストラクターを作成する際に発生したものです。o_Abst
組み込み代入でコンポーネントに値を代入できません=
(Intel コンパイラは、「組み込み代入ステートメントでは、変数はポリモーフィックであってはなりません」と言います)。Abst
または、渡されたオブジェクトの仮引数以外の引数が抽象型である場合、遅延型バインドプロシージャを適切にオーバーライドできないため、型オブジェクトのコンストラクターを作成できません。
のような型の使用を回避する回避策についてもお知らせいただければ幸いSup
です。抽象型のコンポーネントを使用して型を定義したくなる場合、一般的な代替戦略は何ですか?