Estoy usando Arduino y me gustaría saber si hay una función que devuelve el tipo de datos de una variable. Es decir, me gustaría ejecutar algo como lo siguiente:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Respuestas:
En un programa típico de C ++, usaría el
typeid
operador, así:Sin embargo, eso requiere una característica del compilador llamada Información de tipo de tiempo de ejecución (RTTI). Está deshabilitado en el IDE de Arduino, presumiblemente porque tiende a aumentar los requisitos de memoria de tiempo de ejecución del programa.
Puede obtener más información sobre el costo de los recursos aquí: /programming/579887/how-expensive-is-rtti
Sin embargo, cualquier compilador de C ++ con todas las funciones definitivamente admitirá RTTI. Si desea intentar usar un IDE de terceros (como Eclipse con el complemento Arduino), puede habilitarlo fácilmente. Sin embargo, probablemente no valga la pena solo por eso.
Alternativa
Una solución de mayor rendimiento (pero menos flexible) sería utilizar un enfoque de clase de rasgos. Esto implica una metaprogramación de plantilla original:
Puede agregar
MAKE_TYPE_INFO(..)
líneas para cualquier tipo que desee, incluidos los nombres de clases personalizadas. Entonces podría usarlo así:Cualquier cosa que no defina usando
MAKE_TYPE_INFO(..)
aparecerá como"unknown"
.Eso es algo bastante avanzado, así que no intentaré explicar cómo funciona todo aquí. Sin embargo, hay varios tutoriales en la web sobre programación de plantillas de C ++ si está interesado.
EDITAR: Vale la pena señalar que el
typeof
operador no es C ++ estándar, pero es compatible con algunos compiladores, como GCC. Básicamente es un equivalente anterior dedecltype
, que aparece en el estándar C ++ 11.fuente
Yo uso un enfoque estúpido simple ...
Este es el concepto de polimorfismo donde se crean múltiples funciones con diferentes tipos de parámetros pero con el mismo nombre de función . Durante el tiempo de ejecución, se llamará a la función que coincida con el número correcto de argumentos y tipo (s) de argumento. Espero que esta explicación ayude.
fuente