Przeciążanie operatora szablonu C ++ różnymi typami
Poniższy przykład definiuje podstawową klasę kontenera podtytułu. Korzystając z tej klasy, tworzona jest seria typedefów reprezentujących wersję OOP podstawowego podtypu. Problem pojawia się, gdy zaczynamy przypisywać te typy sobie nawzajem.
Próbowałem zdefiniować operatora jako metodę friend z argumentami lhs i rhs, używając zwykłego PodObjects jako typu, ale bez powodzenia. Czy jest ktoś, kto mógł doświadczyć czegoś podobnego lub zna inne rozwiązanie tego problemu.
Z góry dziękuję.
<code>#include <stdint.h> template <typename T> class PodObject { protected: T _value; public: PodObject<T>(int rhs) { this->_value = static_cast<T>(rhs); } PodObject<T> operator+= (PodObject<T> const &rhs){ this->_value = rhs._value; return *this; } }; typedef PodObject<int8_t> Int8; typedef PodObject<int16_t> Int16; int main() { Int16 a = 10; Int8 b = 15; a += b; // Source of problem return 0; } </code>
Wynik w kompilatorze:
<code>example.cpp:26:11: error: no viable overloaded '+=' a += b; ~ ^ ~ example.cpp:13:22: note: candidate function not viable: no known conversion from 'Int8' (aka 'PodObject<int8_t>') to 'const PodObject<short>' for 1st argument PodObject<T> operator+= (PodObject<T> const &rhs){ </code>
EDYTOWAĆ:
Poniższa metoda przyjaciela ma dla mnie zadanie:
<code>template<typename U, typename W> friend PodObject<U> operator+= (PodObject<U> &lhs, PodObject<W> const &rhs) { lhs._value += rhs._value; return lhs; } </code>