2011-01-21 20 views
9

सी ++ में भर में सी # में एक प्रकार उर्फ ​​परिभाषित है, यह की तर्ज पर कुछ लिखने के लिए आसान है:एकाधिक फ़ाइलों

#ifdef FAST 
typedef Real float; 
#endif 

#ifdef SLOW 
typedef Real double; 
#endif 

#ifdef SLOWER 
typedef Real quad; 
#endif 

कुछ सामान्य हेडर फाइल में तो मैं बस कोड का एक संस्करण लिखने और #define सकता है विभिन्न बाइनरी पाने के लिए उपयुक्त संस्करण।

मैं जानता हूँ कि सी # में आप की तर्ज पर कुछ इसी तरह कर सकते हैं:

using Real = double; 

आप typedefs के समान अर्थ विज्ञान प्राप्त कर सकते हैं ताकि। लेकिन क्या उपरोक्त सी ++ कोड के समान कुछ करना संभव है कि मुझे प्रत्येक फ़ाइल में लिखना नहीं होगा?

+3

o__O 'quad' क्या है? – Mehrdad

+0

आईएमओ यह निर्भर करता है कि निर्भरता इंजेक्शन के लिए संभावित उम्मीदवार की तरह लगता है यदि बाइनरी असेंबली हैं। – Terrance

+1

@ मेहरदाद: एक काल्पनिक फ्लोटिंग पॉइंट डेटा प्रकार जो दोगुना बड़ा होता है। –

उत्तर

6

यदि आप इनबिल्ट आईएल ऑपरेटरों का उपयोग करना चाहते हैं तो नहीं - आपको प्रति फ़ाइल करना होगा। हालांकि, अगर आपको लगता है कि (मैं तुम्हें कर संदेह है) की जरूरत नहीं है आप में यह संपुटित सकता है एक struct:

public struct Real { 
    private readonly REAL_TYPE value; 
    public(REAL_TYPE value) { this.value = value; } 
    // TODO add lots of operators (add, multiply. etc) here... 
} 

(जहां REAL_TYPE एकल फ़ाइल कि वाणी Real में एक using अन्य नाम है)

मेरे पैसे के लिए, इसके लायक नहीं है। और उपयोग अगर स्थिर ऑपरेटर अपेक्षाकृत धीमे होंगे कि प्रत्यक्ष आईएल ऑपरेशंस जो आपको मिलते-जुलते थे तो आपको मिलेगा।

+0

तो मुझे लगता है कि मेरा एकमात्र असली विकल्प मेरी सभी फाइलों के शीर्ष पर #if #elses का विशाल ब्लॉक है। –

+0

@ सेजकिला या परिदृश्य से पूरी तरह से बचें :)। –

+0

ठीक है, मेरी आवश्यकताओं में से एक गणना में इस्तेमाल परिशुद्धता के विभिन्न स्तर निर्दिष्ट करने में सक्षम होना है। एक गति बनाम परिशुद्धता व्यापार बंद है, कुछ मामलों में युगल का उपयोग करने में कोई बात नहीं है और दूसरों में यह एक पूर्ण न्यूनतम है। –

-3

निकटतम चीज़ आंशिक कक्षाएं होगी। partial classes आपको एक से अधिक फाइलों में एक वर्ग को परिभाषित करने देता है।

+4

यह इस लक्ष्य को बिल्कुल प्राप्त नहीं करता है; 'उपयोग' उपनाम आंशिक वर्ग की विभिन्न फ़ाइलों के बीच लागू नहीं होगा। –

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