मुझे लगता है कि मैं हल करने के लिए पता नहीं कैसे एक उचित रूप में सरल सवाल है।खाका ओवरलोडिंग (संदर्भ और गैर संदर्भ संस्करण)
कल्पना कीजिए निम्नलिखित टेम्पलेट विधि
template<typename T> void Add(T& var);
जहां विशेषज्ञताओं एक कंटेनर (एक तरह से) के लिए कुछ जोड़ सकते हैं। मैं strings
तरह POD
या अधिक जटिल प्रकार में पारित कर सकते हैं और यही वजह है कि मैं एक संदर्भ के रूप में टी गुजर रहा हूँ।
इस के साथ समस्या यह है कि जब भी मैं फोन करने के लिए (...) की तरह एक और तरीका का एक परिणाम के साथ जोड़े चाहते हैं:
Add(MethodThatReturnsAnInt());
यह काम नहीं करेगा और एक अस्थायी चर धारण करने के लिए की जरूरत है MethodThatReturnsAnInt()
का परिणाम।
वहाँ Add
अधिक भार इतना है कि मैं एक संदर्भ गुजर और गैर संदर्भ गुजर संस्करण हो सकता है की कोई तरीका है?
template<typename T> void Add(T& var);
template<typename T> void Add(T var);
std::enable_if
इस स्थिति में किसी काम के हो सकते हैं?
[रावल संदर्भ] (http://en.cppreference.com/w/cpp/language/reference) के बारे में पढ़ें और जानें। –
गूगल _forwarding reference_। आपकी स्थिति और परिणामी प्रश्न इतना आम थे कि उन्होंने इसके लिए एक भाषा सुविधा जोड़ा। ;-) यह सी ++ 11 की मूलभूत विशेषता है और शायद पहले से ही पर्याप्त समय का उत्तर दिया गया है। –
क्या समस्या आप वास्तव में हल करने की कोशिश कर रहे हैं? 'जोड़ें() 'क्या करता है? – Barry