2013-10-01 8 views
12

मैं एक फोरट्रान व्युत्पन्न प्रकारफोरट्रान व्युत्पन्न प्रकार काम

type :: atype 
    integer :: n 
    integer :: a(10) 
    integer, allocatable :: b(:) 
end type 

है और मैं इस प्रकार के

type(atype) :: t1, t2 

वास्तव में होता क्या है जब मैं निम्न असाइनमेंट करने के दो उदाहरणों है कहो?

t2 = t1 

मैं इस में दिलचस्पी है क्योंकि मैं सही ढंग से अर्थ, अदिश घटकों बराबर होना चाहिए व्युत्पन्न प्रकार चर की प्रतियां बनाने के लिए चाहते हैं, सरणी घटकों के प्रत्येक तत्व बराबर होना चाहिए और allocatable सरणियों ही आवंटित आकार होना चाहिए और तत्व बराबर होना चाहिए। फिलहाल मैं एक सबराउटिन लिखूंगा जो प्रतियों को प्रतिलिपि बनाता है और आवंटित करता है।

subroutine copy_atype(from, to) 
    type(atype) :: from, to 
    to%n = from%n 
    to%a = from%a 
    if (allocated(to%b)) deallocate(to%b) 
    if (allocated(from%b) then 
     allocate(to%b(size(from%b))) 
     to%b = from%b 
    end if 
end subroutine 

मैं मानकों में उपयुक्त वर्गों के निर्देशों की सराहना करता हूं।

मैं gfortran 4.7 का उपयोग कर रहा हूँ।

उत्तर

11

अनुपस्थिति एक उपयुक्त परिभाषित असाइनमेंट प्रक्रिया के दूसरे पर एक एटइप के असाइनमेंट के लिए सुलभ होने के लिए, आंतरिक व्युत्पन्न प्रकार असाइनमेंट होता है। यह F2008 7.2.1.3 में वर्णित है। अपने प्रकार परिभाषा के लिए, आंतरिक व्युत्पन्न प्रकार काम मूल रूप से करता है कि आपके प्रक्रिया करता है:

  • गैर allocatable घटकों (कि खुद प्रकार बाध्य परिभाषित काम नहीं है) आंतरिक काम का उपयोग कर भर दिया जाता है। यदि उनके पास टाइप बाउंड असाइनमेंट है, तो इसका उपयोग किया जाता है।

  • वस्तु में Allocatable के घटकों के साथ पुनः आवंटित की जाती रहे हैं पहले से ही आवंटित निर्धारित किये जाने से एक ही प्रकार के साथ पुनः आवंटन, प्रकार पैरामीटर और अभिव्यक्ति की सीमा निर्धारित किये जाने से, और फिर टाइप बाध्य परिभाषित काम (यदि लागू हो) या आंतरिक काम प्रयोग किया जाता है मूल्य हस्तांतरण करने के लिए।

इसके अलावा

:

  • सूचक घटकों सूचक भर में आवंटित कर रहे हैं;

  • कोरेरे घटकों को चर और अभिव्यक्ति के बीच आवंटन स्थिति में मेल खाना चाहिए, और आंतरिक असाइनमेंट का उपयोग करके स्थानांतरित किया जाता है।

1

यह कुछ दिनों पहले पूछे गए प्रश्न के समान है: Nested derived type with overloaded assignment। एक विस्तृत स्पष्टीकरण के लिए स्वीकृत उत्तर देखें।

type :: atype 
    integer :: n 
    integer :: a(10) 
    integer, allocatable :: b(:) 
contains 
    procedure :: copy_atype 
    generic :: assignment(=) => copy_atype 
end type 

इस तरह, आप सीधे प्रकार atype के एक चर करने के लिए एक ही प्रकार के मान निर्दिष्ट कर सकते हैं:

आप सीधे एक assignment ऑपरेटर के रूप में उपयोग कर सकते हैं आप सबरूटीन copy_atype कर रहे हैं। आप उचित सबराउटिन की अल्पविराम से अलग सूची देकर अन्य प्रकार के चरों को असाइनमेंट भी बढ़ा सकते हैं।

+0

जानना अच्छा है, यद्यपि मैं वास्तव में क्या खोज रहा था। – stiaan

संबंधित मुद्दे