क्या वास्तव में केवल सीमाओं पर WinRT का उपयोग किया जा सकता है?


15

Microsoft (मुख्य रूप से, हर्ब सटर ) , WinRT का उपयोग C ++ / CX के साथ करने की सिफारिश करता है, ताकि WinRT को आवेदन की सीमाओं पर रखा जा सके और मानक ISO C ++ में लिखे गए आवेदन का मूल रखा जा सके।

मैं एक एप्लिकेशन लिख रहा हूं, जिसे मैं पोर्टेबल छोड़ना चाहूंगा, इसलिए मेरी मुख्य कार्यक्षमता मानक C ++ में लिखी गई थी, और अब मैं C ++ / CX का उपयोग करके इसके लिए मेट्रो-स्टाइल फ्रंट एंड लिखने का प्रयास कर रहा हूं। मैं इस दृष्टिकोण के साथ एक समस्या है, हालांकि। उदाहरण के लिए, यदि मैं उपयोगकर्ता-निर्धारित C ​​++ प्रकार के वेक्टर को XAML ListView नियंत्रण पर धकेलना चाहता हूं, तो मुझे अपने उपयोगकर्ता-परिभाषित प्रकार को WinRT रेफ / मान प्रकार में लपेटना होगा, ताकि उसमें संग्रहीत किया जा सके Vector^। इस दृष्टिकोण के साथ, मैं अनिवार्य रूप से WinRT वर्गों के साथ अपने C ++ वर्गों के एक बड़े हिस्से को लपेटने के साथ छोड़ दिया गया हूं।

यह पहली बार है जब मैंने C ++ में पोर्टेबल देशी एप्लिकेशन लिखने की कोशिश की है। क्या इस तरह की सीमाओं के साथ WinRT को रखना वास्तव में व्यावहारिक है? प्लेटफ़ॉर्म-विशिष्ट सीमा के साथ इस प्रकार के पोर्टेबल कोर को कैसे नियंत्रित किया जा सकता है?


एमवीवीएम की तरह कुछ, जहां मॉडल मानक सी ++ है, वी और वीएम WinRT इंटरोप ऑब्जेक्ट हैं?
अधिकतम

5
"लेकिन प्रत्येक वीएम मेरे मानक मॉडल के आसपास प्रभावी रूप से एक आवरण में बदल जाता है।" - यह किसी भी परिदृश्य में देखने के मॉडल के लिए बहुत आम है।
मैटवेवी

1
@ GlenH7, मेरा मानना ​​है कि टिप्पणियों ने ज्यादातर मेरे लिए इसका जवाब दिया है। मैं उसी नतीजे पर पहुँच गया था, लेकिन उम्मीद कर रहा था कि किसी के दिमाग में अधिक चतुर विचार था। सामान्य तौर पर, चीजें बस वैसे ही होती हैं जैसे वे हैं। आप अपने कोड को अलग करने के लिए अपना सर्वश्रेष्ठ कर सकते हैं, लेकिन अधिकांश भाग के लिए आपको कोड के प्लेटफ़ॉर्म-विशिष्ट भागों को फिर से लिखने की आवश्यकता होगी (जैसे ऊपर ViewModel उदाहरणों में)।
ब्रेट कुहंस

1
@ GlenH7 शायद प्लेटफ़ॉर्म पर अपने एप्लिकेशन कोड को सुसंगत रखने का एकमात्र तरीका यह है कि आप अपने स्वयं के प्लेटफ़ॉर्म एब्सट्रैक्शन लेयर को लिखें, लेकिन उन परतों को समाप्त हो जाएगा जो मैं पहली जगह में बचने की कोशिश कर रहा था। यह बस चीजों को अलग करने के लिए एक परत अमूर्त के साथ समस्या को आगे बढ़ा रहा है। शायद मदद करता है, लेकिन अंत में आप अभी भी काम कर रहे हैं।
ब्रेट कुहंस

1
हमने एंड्रॉइड पर जावा में एक सी लाइब्रेरी को मूल रूप से गोंद करने के लिए "सिल्वर बुलेट" बनाने की एक बार कोशिश की। अंत में यह ~ × 10 अधिक समय बिताने और विदेशी डिबगिंग तकनीकों का उपयोग करने के बाद (फ्रंटियर पर असामान्य व्यवहार के आसपास काम करने के लिए) काम कर सकता है। निश्चित रूप से, यह मजेदार था।
एलेक्स कोहेन

जवाबों:


8

IMHO (पुराना प्रोग्रामर; Microsoft पर काम करते हैं लेकिन यह एक व्यक्तिगत राय है): इससे पहले कि मैं इस प्रश्न का उत्तर दूं, आपको इस अन्य प्रश्न का हल निकालना होगा:

कोड कहां जा रहा है? यदि आप एक ही मंच (इस मामले में, WinRT) के साथ चिपके हुए हैं, तो मंच के करीब रहें - और इसका मतलब है कि मौजूदा सार का उपयोग करना। आपके उदाहरण के अनुसार, आपका कोड WinRT की जरूरतों को पूरा करने के लिए वेक्टर ^ का उपयोग करेगा।

OTOH, यदि आप कहीं और जा रहे हैं (VMS चट्टानों!), तो मानकों पर आधारित समझदारी है।

यह देखते हुए कि बाज़ार में तीन सबसे बड़े पोर्टेबल, टैबलेट जैसे प्लेटफॉर्म सभी आम प्रोग्रामिंग कार्यों के लिए विभिन्न भाषाओं का उपयोग करते हैं, कोड को स्थानांतरित करना एक मूल्यवान विकल्प नहीं हो सकता है।


मैं सहमत हूँ। मैंने WinRT को लक्षित करने वाली परियोजना शुरू की, लेकिन Android / iOS को पोर्ट करने के लिए आकर्षक प्लेटफॉर्म होगा, जिसने इस प्रश्न को प्रेरित किया। मैंने तब से विशेष रूप से केवल WinRT के खिलाफ लिखने का फैसला किया है। यदि परियोजना स्वयं एक भीड़ खींचती है, तो मैं पोर्टिंग के बारे में चिंता करूँगा (या बल्कि, किसी अन्य प्लेटफॉर्म पर फिर से लिखना)।
ब्रेट कुहन्स

जैसा कि @alexcohn ने बताया, यदि मुख्य कार्यक्षमता उस समय काफी भारी होती है जब मैं क्रॉस प्लेटफॉर्म पर जाने का फैसला करता हूं, तो यह प्लेटफ़ॉर्म विशिष्ट परतों के साथ पोर्टेबल कोड को लपेटने के लायक होगा। अन्यथा, मैं सिर्फ कोड को फिर से लिखूंगा और विभिन्न प्लेटफार्मों (जहां उपयुक्त हो) पर व्यवहार को सत्यापित करने के लिए परीक्षण सूट का उपयोग कर सकता हूं।
ब्रेट कुहन्स

0

आपको C ++ / CX का उपयोग करने की आवश्यकता नहीं है, इसके बजाय आप WRL ( Windows रनटाइम लाइब्रेरी ) का उपयोग कर सकते हैं, जो कि पुराने ATL टेम्प्लेट की तरह है, न कि 'ढोंग' C ++ जो C ++ / CX है। WinRT वस्तुओं का उपभोग करने के लिए एमएस से "निम्न स्तर" दृष्टिकोण और पूरी तरह से मानक सी ++ है जैसे दादाजी लिखते थे!

यह C ++ / CX के रूप में "अच्छा" नहीं हो सकता है, लेकिन यह राय का विषय है - मेरी व्यक्तिगत राय है कि C ++ / CX एक विस्तारित C ​​++ पर तीसरा प्रयास है, और यह एक तीसरी विफलता है। इसे अनदेखा करें और उम्मीद करें कि यह अन्य 2 अवतारों की तरह ही चले।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.