2012-12-05 11 views
12

फोरट्रान 90 में ओवरलोडिंग फ़ंक्शंस, हम एक इंटरफ़ेस के साथ फ़ंक्शन ओवरलोड कर सकते हैं। हालांकि, this site के अनुसार, हम इन कार्यों को उसी तर्क नाम के साथ परिभाषित नहीं कर सकते हैं। gfortran के साथ, यह एक समस्या हो प्रतीत नहीं होता है निम्नलिखित कोड अच्छी तरह से काम करने के लिए पर्याप्त रूप में:फोरट्रान

interface check 
    module procedure check_int, check_real 
end interface 

contains 

subroutine check_int(cur, dname, func_name, fname) 
    integer, allocatable, intent(in) :: cur(:) 
    character(*) :: dname, func_name, fname 
    ... 
end subroutine 

subroutine check_real(cur, dname, func_name, fname) 
    real, allocatable, intent(in) :: cur(:) 
    character(*) :: dname, func_name, fname 
    ... 
end subroutine 

इसलिए, यह बुरा व्यवहार ऐसा करने के लिए है?

संपादित करें: कीवर्ड के साथ फ़ंक्शन को कॉल करना कुछ भी नहीं बदलेगा।

उत्तर

13

आपका उदाहरण पूरी तरह से मान्य है। उन्हें तर्कों के प्रकार से अलग किया जा सकता है। तब नाम महत्वपूर्ण नहीं हैं। आपके मामले में cur तर्क का प्रकार अलग है।

उसी नाम के साथ तर्कों को उनके प्रकार, प्रकार या रैंक (टीकेआर संगतता) द्वारा अलग किया जा सकता है।

संदर्भित आलेख का बिंदु यह है कि आप तर्कों के आदेश द्वारा केवल दो विशिष्ट प्रक्रियाओं को अलग नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि किसी भी क्रम में कीवर्ड तर्कों के साथ प्रक्रियाओं को बुलाया जा सकता है। तर्कों के लिए अलग-अलग नामों का उपयोग करके इसे खत्म किया जा सकता है।

अन्यथा तर्क के समान नाम वाले एक सामान्य के लिए अधिक विशिष्ट प्रक्रियाओं की घोषणा करना, लेकिन विभिन्न प्रकार/प्रकार/रैंकों के साथ बहुत आम और पूरी तरह मान्य है।

फोरट्रान 2003/2008 जेनेरिक रिज़ॉल्यूशन के लिए कुछ और संभावनाएं जोड़ता है। प्रक्रियाओं को उनके तर्कों के सूचक/आवंटित गुण और प्रक्रिया सूचक डमी तर्कों द्वारा अलग करना भी संभव है।

+0

मैंने इसे ऐसा नहीं देखा। धन्यवाद :) –

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