Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/10/2014, 16:23
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Crear una máscara para ver determinados miembros de una estructura

Cita:
Iniciado por dehm Ver Mensaje
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 original
  1. auto variable; // Error de compilación, no se puede determinar el tipo
  2.  
  3. 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 original
  1. auto var1 = 4; // var1 será de tipo int
  2.  
  3. 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 Ver Mensaje
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 original
  1. class Variant
  2. {
  3.   public:
  4.  
  5.     enum DataType
  6.     {
  7.       DTInt,
  8.       DTChar,
  9.       DTFloat,
  10.       DTString
  11.     };
  12.  
  13.     explicit Variant( const std::string& valor )
  14.       : _type( DTString )
  15.     {
  16.       _string = valor;
  17.     }
  18.  
  19.     Variant& operator=( const std::string& valor )
  20.     {
  21.       _type = DTString ;
  22.       _string = valor;
  23.  
  24.       return *this;
  25.     }
  26.  
  27.   private:
  28.  
  29.     union Data
  30.     {
  31.       int intData;
  32.       char charData;
  33.       float floatData;
  34.     };
  35.  
  36.     Data _data;
  37.     DataType _type;
  38.     std::string _string;
  39. };

El resto de la implementación os la podéis imaginar :)

Un saludo.

Última edición por eferion; 31/10/2014 a las 03:27