जब आप निर्दिष्ट कि एक सामान्य पैरामीटर एक निजी प्रकार है, ठीक है, एडा मानता है कि आप इसका मतलब है :-)
आईई। आपके पास इसके घटकों तक पहुंच नहीं है। एडा "duck typed" नहीं है, इसलिए यह अप्रासंगिक है कि आप जानते हैं कि एक तत्काल प्रकार वास्तव में एक विशेष क्षेत्र हो सकता है। (आप अपने चेकसम फ़ंक्शन को काम करने की अपेक्षा कैसे करेंगे यदि कहें, इंट्रगर के साथ The_Transfer_Type पैरामीटर को तत्कालित किया गया था?)
इसका समाधान करने का एक तरीका सामान्य के लिए पैरामीटर के रूप में एक एक्सेसर फ़ंक्शन भी प्रदान करना है जो आवश्यक डेटा पुनर्प्राप्त करेगा इस मामले में, चेकसम की गणना करें। उदा .:
generic
type The_Transfer_Type is private;
with function Get_Checksummable_Data_Item
(Msg : The_Transfer_Type;
I : Integer) return Integer;
SIZE : Integer;
package CC_Test_Channel is
function Checksum(Msg : The_Transfer_Type) return Integer;
end CC_Test_Channel;
शरीर तो है:
function Checksum(Msg : The_Transfer_Type) return Integer is
Sum : Integer := 0;
begin
-- calculate the checksum
for i in 1 .. SIZE loop
Sum := Sum + Get_Checksummable_Data(Msg, I);
end loop;
return Sum;
end Checksum;
समारोह आप Get_Checksummable_Data के लिए आपूर्ति तो The_Transfer_Type लिए विशिष्ट है और बस The_Transfer_Type के घटक क्षेत्रों से चयनित मान देता है।
इसे स्थापित करने के कई अन्य तरीके भी हैं, जैसे एक सामान्य औपचारिक पैरामीटर के रूप में एक अनियंत्रित सरणी प्रकार प्रदान करना और इसे पुनर्प्राप्त करने के लिए एक औपचारिक कार्य - यह आपको स्पष्ट SIZE औपचारिकता से छुटकारा पाने की अनुमति देता है पैरामीटर। या आप प्रकार पर कार्य है कि आप के साथ CC_Test_Channel instantiating रहे हैं में से एक के रूप में एक Checksum() फ़ंक्शन लिख सकता है, और उसके बाद है:
with function Calculate_Checksum(Msg : The_Transfer_Type) return Integer;
सामान्य औपचारिक में से एक के रूप में
।
चरण वापस, और संभावनाओं के बारे में सोचना ...
स्रोत
2010-02-26 13:39:55
जब तक वह वापस कदम उठा रहा है, तब तक वह डेटा ऑपरेशन का उपयोग करने के लिए धारा संचालन का उपयोग करने पर विचार करने योग्य हो सकता है ... –
यह वह समाधान था जिसके साथ मैं गया था। स्ट्रीम ऑपरेशंस क्या हैं? –
उत्तर बहुत लंबा हो गया, और मैंने तय किया कि इसे स्वरूपण की आवश्यकता है, इसलिए मैंने इसे नीचे दूसरे जवाब में स्थानांतरित कर दिया। –