Скажем, у вас есть объявленный тип dat1
, который имеет количество членов по умолчанию. В зависимости от времени выполнения это dat1
может расширяться или не расширяться другими типами. Это легко, так как вы можете использовать функцию extends
. Однако, если у вас есть массив dat1
и некоторые элементы этого массива могут хотеть или не хотеть наследовать другой тип - как это сделать наиболее разумно.
У меня есть следующий пример:
type dat1
real :: x(3)
type(dat2), allocatable :: rnd
type(dat1), pointer :: next => dat1
end dat1
Теперь я использовал связанный список для этого. Мой вопрос в основном, если это правильный способ объявить второй тип rnd
как выделяемый, а затем просто выделить его всякий раз, когда узел запрашивает его.
Другой вариант - объявить его как указатель, т. Е. type(dat2), allocatable :: rnd
, теперь есть какие-либо существенные различия, несмотря на общие различия Фортрана с указателями по сравнению с присваиваемыми значениями, такими как явное / неявное освобождение, непрерывная память и т. Д.
Обратите внимание, что независимо от того, что к каждому узлу dat1
всегда будет присоединен тип 0 или 1 rnd
.
Я думал во время выполнения, что я проверю, был ли выделен rnd
или для указателя это будет связано.