Mi duda sería como hacerlo. He hecho ya mi propio código que compara dos tipos de datos, lo que me falla es a la hora de crear el nuevo dato, me dice que hay declaraciones en conflicto:
Código C++:
Adjunto las funciones de compare por si les queréis echar un vistazo.Ver original
template<class T> template<typename T_1, typename T_2> Matrix<T_2> Matrix<T>::operator + (const Matrix<T_1> &m_2) { T c; T_1 b; char a=compare(b,c); switch(a) { case 's': Matrix<short> result(I, J); break; case 't': Matrix<unsigned short> result(I, J); // declaración en conflicto break; case 'i': Matrix<int> result(I, J); break; case 'j': Matrix<unsigned int> result(I, J); break; case 'l': Matrix<long> result(I, J); break; case 'm': Matrix<unsigned long> result(I, J); break; case 'x': Matrix<long long> result(I, J); break; case 'y': Matrix<unsigned long long> result(I, J); break; case 'f': Matrix<float> result(I, J); break; case 'd': Matrix<double> result(I, J); break; case 'e': Matrix<long double> result(I, J); break; } for(int i=0; i<I; i++) { for(int j=0; j<J; j++) { result.value(i,j)=this->value(i,j)+m_2.value(i,j); } } return result; }
Código C++:
Ver original
template<typename D_1, typename D_2> char compare(D_1 a, D_2 b) { return is_data(fmax(range(typeid(a).name()), range(typeid(b).name()))); }r char is_data(int a) { char data; switch(a) { case 1: data='s'; break; case 2: data='t'; break; case 3: data='i'; break; case 4: data='j'; break; case 5: data='l'; break; case 6: data='m'; break; case 7: data='x'; break; case 8: data='y'; break; case 9: data='f'; break; case 10: data='d'; break; case 11: data='e'; break; } return data; } int range(const char *name) { int range; switch(*name) { case 's': range=1; break; case 't': range=2; break; case 'i': range=3; break; case 'j': range=4; break; case 'l': range=5; break; case 'm': range=6; break; case 'x': range=7; break; case 'y': range=8; break; case 'f': range=9; break; case 'd': range=10; break; case 'e': range=11; break; } return range; }
Supongo que existirá alguna manera que desconozco de simplificar el código.
Gracias.