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>

questionAnswers(1)

yourAnswerToTheQuestion