#ifndef NUMBER_HPP
#define NUMBER_HPP
template <class T>
class Number
{
public:
Number( T value ) : m_value( value )
{
}
T value() const
{
return m_value;
}
void setValue( T value )
{
m_value = value;
}
Number<T>& operator=( T value )
{
m_value = value;
}
// template <class T2>
// Number<T2>& operator=( const Number<T>& number )
// {
// m_value = number.value();
// return *this;
// }
private:
T m_value;
};
typedef Number<int> Integer;
typedef Number<float> Float;
typedef Number<double> Double;
#endif //NUMBER_HPP
Comentó el operador de asignación sobrecarga es mi intento de hacer lo que quiero, pensé que podría proporcionar una mejor descripción de la de arriba el fragmento de código.
Quiero ser capaz de hacer lo siguiente:
Float a(10);
Integer b(20);
a = b;
Donde a
entonces se puede lanzar a un int
y dado el valor de b
, pero todavía puede ser una instancia de la clase Number
.
Es posible? Puede usted ayudarme a salir de aquí?
Gracias de antemano.
- Lo que está mal con el operador de asignación por defecto, combinado con la conversión implícita proporcionados por el constructor? Que va a hacer exactamente lo que los operadores están tratando de hacer, sin tener que escribir ningún código.
- Ha sido un tiempo desde que hice en C++, pero también puede anular la cast/operador de conversión.
Usted debe hacer esto:
Que es, el uso de
T2
en el tipo de parámetro, no en el tipo de retorno!Prefiero utilizar letra diferente para el parámetro de plantilla:
Creo, es mejor utilizar explícita emitidos, si desea utilizar el tipo de clase como argumento de plantilla y cuyo constructor ha sido declarado
explicit
:Por cierto, el otro
operator=
debe ser implementada como:Usted tiene algunos de los
T
s en el lugar equivocado. Debe serEsto le permitirá hacer
y se va a imprimir
6
, un comportamiento similar a la de laint
yfloat
tipos que están imitando.