Cita:
Iniciado por dehm De hecho estaba trasteando con punteros void e intentando
colársela al compilador con el nuevo tipo
auto...pero no sé por qué siempre que intento hacer esas ñapas el compilador me corta el rollo rápidamente.
"auto" es una palabra clave que se sustituye por un tipo concreto (int, float, string) en tiempo de compilación. Para poder hacer esto, el compilador tiene que poder adivinar el tipo de la variable en tiempo de compilación. Por ejemplo:
Código C++:
Ver originalauto variable; // Error de compilación, no se puede determinar el tipo
auto var2 = 45; // var2 será de tipo int
Además, dado que el tipo se determina en tiempo de compilación, éste no es mutable. Te lo explico con un ejemplo:
Código C++:
Ver originalauto var1 = 4; // var1 será de tipo int
var1 = "Hola"; // Error de compilación, var1 no puede cambiarse a string
Espero que estos comentarios te aclaren los motivos por los que el compilador no aceptaba tus usos de "auto".
Cita:
Iniciado por dehm eferion....este tipo de respuestas me va a obligar a aprender C++
Ya en serio, muchas gracias. Y fuera de bromas necesito 2-3 horas (mínimo) para entender todas las cosas que has puesto. En cuanto lo tenga todo claro lo comento aquí....espero no tener que dar la lata de nuevo.
Lo de aprender C++ es una buena idea :)
Y no, preguntar dudas no es el equivalente a dar la lata.
Un saludo.
EDITADO:
PD.: La clase "Variant" se puede adaptar de forma sencilla para que trabaje también con strings, eso sí, dado que la clase string hace uso de memoria dinámica no es conveniente incluir la instancia de string dentro del union so pena de corromper la memoria:
Código C++:
Ver originalclass Variant
{
public:
enum DataType
{
DTInt,
DTChar,
DTFloat,
DTString
};
explicit Variant( const std::string& valor )
: _type( DTString )
{
_string = valor;
}
Variant& operator=( const std::string& valor )
{
_type = DTString ;
_string = valor;
return *this;
}
private:
union Data
{
int intData;
char charData;
float floatData;
};
Data _data;
DataType _type;
std::string _string;
};
El resto de la implementación os la podéis imaginar :)
Un saludo.