Marcello
Marcello

Reputation: 43

Extension of abstract types in different modules

In the following piece of code, an abstract type with a private variables (name) and an access function to this variable, which is supposed to be defined by all derived types, is defined in a module:

module baseTypeModule

type, abstract :: baseType
private
    character(len=maxLengthCompLabel) :: Name = ""           ! Component name
contains
    procedure, non_overridable :: getName                    ! Access functio to Name (read only)
end type baseType

contains

character(len=100) function getName(this)
    implicit none
    class(baseType), intent(in) :: this
    getName = this % Name
end function getName

end module baseTypeModule

As there are many other variables and functions in each derived type, I would like to define each derived types in a different module.

Is there a way in Fortran to tell the compiler that I want that only derived types of baseType would be able to change the variable Name?

Upvotes: 2

Views: 69

Answers (1)

IanH
IanH

Reputation: 21451

No. Accessibility of component names uses the same "by module" model as for other module entities. If the other derived types are in different modules, then they cannot access the Name component.

Bear in mind that derived types don't actually contain procedures - they contain bindings for procedures. Consequently a derived type can't really "do" anything. Also a single procedure could be bound to multiple types.

Upvotes: 2

Related Questions