Operador de modelo C ++ sobrecarregando com diferentes tipos
O exemplo abaixo define uma classe de contêiner podtype básica. Usando essa classe, uma série de typedefs é criada, o que representa uma versão OOP do podtype básico. O problema se origina quando começamos a atribuir esses tipos uns aos outros.
Eu tentei definir o operador como método amigo com argumentos lhs e rhs usando PodObjects simples como tipo, mas sem nenhum sucesso. Existe alguém que possa ter experimentado algo semelhante ou conhecer outra solução para esse problema?
Desde já, obrigado.
<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>
Resultados em uma saída do compilador:
<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>
EDITAR:
O método amigo abaixo faz o trabalho para mim:
<code>template<typename U, typename W> friend PodObject<U> operator+= (PodObject<U> &lhs, PodObject<W> const &rhs) { lhs._value += rhs._value; return lhs; } </code>