रेने एक अच्छा जवाब प्रदान की गई है। इसके अलावा, यहां एक पूर्ण उदाहरण है। ध्यान दें कि मैंने proxy_T
कक्षा में "उपयोगकर्ता परिभाषित रूपांतरण", यानी operator T
जोड़ा है।
#include <iostream>
#include <array>
#include <stdexcept>
template <class T>
class myClass
{
std::array<T, 5> TheArray; // Some array...
class proxy_T
{
T& value; // Reference to the element to be modified
public:
proxy_T(T& v) : value(v) {}
proxy_T& operator=(T const& i)
{
if (i >= 0 and i <= 9)
{
value = i;
}
else
{
throw std::range_error(std::to_string(i));
}
return *this;
}
operator T() // This is required for getting a T value from a proxy_T, which make the cout-lines work
{
return value;
}
};
public:
proxy_T operator [](int const idx)
{
return TheArray.at(idx);
}
T operator [](int const idx) const
{
return TheArray[idx];
}
};
int main() {
myClass<int> A;
std::cout << A[0] << std::endl;
A[0] = 2;
std::cout << A[0] << std::endl;
A[1] = 20;
}
आपको एक प्रॉक्सी ऑब्जेक्ट वापस करने की आवश्यकता होगी जो इसके बजाय तत्व को लपेटती है, और यह असाइनमेंट पर रेंज-चेकिंग करती है। –
नियंत्रण से आपका क्या मतलब है? क्या आप एक संकलन त्रुटि को आग लगाना चाहते हैं, या आप रन पर अपवाद फेंकना चाहते हैं, या आप चुपचाप असाइनमेंट को अनदेखा करना चाहते हैं, या यदि आप सीमा में नहीं हैं तो क्या आप मूल्यों को काटना चाहते हैं? – taskinoor
@ टास्किनूर हम हमेशा कक्षाओं के बारे में क्या करते हैं ... हम अपवाद फेंकना चाहते हैं! – geradism