Constructors for dynamically allocated CLASS data
John McFarland
mcfarljm@gmail.com
Sun Jul 14 22:38:00 GMT 2013
Quick question about constructors in Fortran 2003/08. Say I have an
abstract base class such as Shape, with child classes such as Circle,
Square, etc. In C++, you can dynamically allocate these data using
something like:
Shape *s;
s = new Circle(3); // Construct a circle with radius=3
I'm wondering if there is a corresponding idiom in Fortran 2003. I can
write procedures that accept CLASS(Circle) or CLASS(Square) and act as
constructors, but it appears that you can't pass a dynamically allocated
instance of CLASS(Shape) into these procedures. In other words:
CLASS(Shape), ALLOCATABLE :: s
ALLOCATE(Circle::s)
CALL Circle_ctor(s,3) // Not allowed
The only other approach I can think of is to write the constructor
procedures such that they accept CLASS(Shape), and then use SELECT TYPE
to access the child data. This is not very elegant though, and gets
cumbersome if I want to use separate procedures for each child
constructor (and then now you need to do error checking in each
constructor procedure to make sure that the dynamic type actually is
what was expected).
Surely there is a better way to do this?
Thanks in advance,
John
More information about the Fortran
mailing list