मान लीजिए मैंक्या खाली कक्षा के निर्माता को वास्तव में किसी भी स्मृति का उपयोग करना है?
class Empty{
Empty(int a){ cout << a; }
}
की तरह एक वर्ग है और फिर मैं यह
int main(){
Empty(2);
return 0;
}
का उपयोग कर लागू करेगा इस कारण किसी भी स्मृति एक "खाली" वस्तु के निर्माण के लिए ढेर पर आवंटित किया जाना? जाहिर है, तर्कों को ढेर पर धकेलने की जरूरत है, लेकिन मैं कोई अतिरिक्त ओवरहेड नहीं लेना चाहता हूं। असल में मैं एक स्थिर सदस्य के रूप में निर्माता का उपयोग कर रहा हूँ।
कारण मैं टेम्पलेट्स के कारण ऐसा करना चाहता हूं।
तरहtemplate <int which>
class FuncName{
template <class T>
FuncName(const T &value){
if(which == 1){
// specific behavior
}else if(which == 2){
// other specific behavior
}
}
};
जो मुझे,
int main(){
int a = 1;
FuncName<1>(a);
}
ताकि मैं एक टेम्पलेट पैरामीटर विशेषज्ञ करने के लिए मिलता
की तरह कुछ लिखने के लिए है, जबकि T
का प्रकार निर्दिष्ट करने नहीं होने की अनुमति देता है वास्तविक कोड लग रहा है। साथ ही, मुझे आशा है कि संकलक अन्य शाखाओं को कन्स्ट्रक्टर के अंदर दूर कर देगा। अगर कोई जानता है कि यह सच है या कैसे जांचें, तो इसकी सराहना की जाएगी। मैंने यह भी माना कि स्थिति में टेम्पलेट फेंकने से ऊपर से "खाली वर्ग" समस्या नहीं बदली है, क्या यह सही है?
सवाल यह है कि आप परवाह क्यों करते हैं।यह सबसे अच्छा कोड की देखभाल और उत्पन्न करने के लिए कंपाइलर का काम है। आपको सबसे अभिव्यक्ति कोड लिखने पर ध्यान देना चाहिए। –
पीएस। स्टैक पर तर्क को धक्का देने की कोई आवश्यकता नहीं है। सी ++ एबीआई को जानबूझकर परिभाषित नहीं किया गया है ताकि कंप्यूटर्स के पास पैरामीटर पास करने के लिए रजिस्टर का उपयोग करने के लिए ऑपरेशन हो, यदि कोड को अधिक प्रभावशाली बनाता है –
मुझे परवाह है क्योंकि मैं उच्चतम प्रदर्शन प्राप्त कर सकता हूं; मैं वास्तव में इस दृष्टिकोण से नफरत करता हूं कि कोड सुरुचिपूर्ण होना चाहिए और इन चीजों के बारे में चिंता न करें। कभी-कभी, ये चीजें मायने रखती हैं (मैं उच्च प्रदर्शन कंप्यूटिंग करता हूं)। –