मेरे पास वेक्टर-जैसी कक्षा है जिसमें "T"
प्रकार की ऑब्जेक्ट्स की एक सरणी है, और मैं 4 अंकगणितीय ऑपरेटरों को कार्यान्वित करना चाहता हूं, जो प्रत्येक आइटम पर ऑपरेशन लागू करेंगे:सी ++: फ़ंक्शन ऑब्जेक्ट के रूप में दो आंतरिक प्रकारों के ऑपरेटर का उपयोग
// Constructors and other functions are omitted for brevity.
template<class T, unsigned int D>
class Vector {
public:
// Add a value to each item: naive implementation.
void operator += (const T&) {
for (int i = 0; i < D; ++i) {
data[i] += value;
}
}
void operator -= (const T&) { ... }
void operator *= (const T&) { ... }
void operator /= (const T&) { ... }
private:
T items[D];
};
क्योंकि ऑपरेटरों एक ही बॉयलरप्लेट कोड में शामिल होंगे (हर तत्व पर पाशन और उचित संचालन को लागू करने), मैंने सोचा कि मैं यह सामान्य हो सकते हैं:
template<class T, unsigned int D>
class Vector {
public:
void operator += (const T& value) { do_for_each(???, value); }
void operator -= (const T& value) { do_for_each(???, value); }
void operator *= (const T& value) { do_for_each(???, value); }
void operator /= (const T& value) { do_for_each(???, value); }
private:
void
do_for_each(std::binary_function<void, T, T>& op, T value) {
std::for_each(data, data + D, std::bind2nd(op, value));
}
T data[D];
};
अब, समस्या यह है, मैं कैसे पारित करना एक ऑपरेटर जो दो intrins लेता है आईसी प्रकार और void
से do_for_each
लौटाता है, जैसा ऊपर उपरोक्त उदाहरण में दिखाया गया है? सी ++ मुझे आंतरिक प्रकार के लिए यह चाल (यदि "T"
"int"
है "T::operator+="
काम नहीं करेगा) करते हैं नहीं है।
आप 'ठीक करने के लिए डेटा' बनाम' items' ... – Alastair
धन्यवाद, फिक्स्ड चाहते हो सकता है यह भी नीचे –
इस तरह के प्रश्न हैं कि दोस्त दोस्तों को ओवरलोड ऑपरेटर – Jonathan