अगर मैं एक सामान्य struct/वर्ग है:बिल्टिन प्रकारों जैसे अंकगणितीय संचालन के लिए दो टेम्पलेट प्रकारों को कैसे बढ़ावा देना है?
template<typename T>
struct Container
{
T value;
Container(const Value& value) : value(value) { }
};
और मैं उनमें से दो पर कार्रवाई करना चाहते हैं:
template<typename T, typename U>
Container<T> operator+(const Container<T>& lhs, const Container<U>& rhs)
{
return Container<T>(lhs.value + rhs.value);
}
समस्या यह है कि lhs
प्रकार की है अगर Container<int>
और rhs
Container<float>
प्रकार का है, तो मुझे Container<int>
वापस मिल जाएगा। लेकिन अगर मैं auto result = 2 + 2.0f
करना चाहता था, तो result
float
टाइप करना होगा। तो व्यवहार बिल्टिन प्रकारों और कस्टम प्रकारों के बीच असंगत है।
तो मैं operator+
अधिभार कैसे ले सकता हूं और इसे Container<float>
वापस कर सकता हूं, जैसे सी ++ बिल्टिन प्रकारों के साथ अंकगणितीय पदोन्नति को कैसे प्रबंधित करता है?
आप सी ++ 11 का उपयोग कर सकते हैं? –
@PiotrSkotnicki हां। – Therhang