मैं कोड का निम्न भाग, प्रकार है कि एक जटिल समारोह कॉल foo में मार डाला है पर वेतन वृद्धि ऑपरेटर के प्रभाव को उल्टा करने के प्रयास dec_proxy एक उदाहरण के रूप है - जो btw मैं नहीं कर सकता के इंटरफ़ेस को बदलें।सी में गैर स्थिरांक संदर्भ ++ के रूप में पासिंग temporaries
#include <iostream>
template<typename T>
class dec_proxy
{
public:
dec_proxy(T& t)
:t_(t)
{}
dec_proxy<T>& operator++()
{
--t_;
return *this;
}
private:
T& t_;
};
template<typename T, typename S, typename R>
void foo(T& t, S& s, R& r)
{
++t;
++s;
++r;
}
int main()
{
int i = 0;
double j = 0;
short k = 0;
dec_proxy<int> dp1(i);
dec_proxy<double> dp2(j);
dec_proxy<short> dp3(k);
foo(dp1,dp2,dp3);
//foo(dec_proxy<int>(i), <---- Gives an error
// dec_proxy<double>(j), <---- Gives an error
// dec_proxy<short>(k)); <---- Gives an error
std::cout << "i=" << i << std::endl;
return 0;
}
समस्या यह है कि विभिन्न प्रकार के लिए मैं dec_proxy मैं वर्तमान में dec_proxy की एक विशेष उदाहरण बनाकर की आवश्यकता होती है का उपयोग करना चाहते है - यह एक बहुत ही गंदा और सीमित दृष्टिकोण की तरह लगता है।
मेरा प्रश्न है: गैर-कॉन्स संदर्भ पैरामीटर के रूप में ऐसे अल्पकालिक अस्थायी को पारित करने का सही तरीका क्या है?
ऑब्जेक्ट को मूल्य से क्यों पास नहीं किया जाता है? –
क्योंकि, यह है कि foo को कैसे परिभाषित किया गया है, मैं foo को नहीं बदल सकता और क्योंकि foo कई पैरामीटर लेता है। –
उस मामले में, उत्कृष्ट सवाल। –