J'utilise Arduino et je voudrais savoir s'il existe une fonction qui renvoie le type de données d'une variable. Autrement dit, je voudrais exécuter quelque chose comme ceci:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Réponses:
Dans un programme C ++ typique, vous utiliseriez l'
typeid
opérateur, comme ceci:Cependant, cela nécessite une fonction de compilation appelée RTTI (Runtime Type Information). Il est désactivé dans l'IDE Arduino, probablement parce qu'il a tendance à augmenter les besoins en mémoire d'exécution du programme.
Vous pouvez obtenir plus d'informations sur le coût des ressources ici: /programming/579887/how-expensive-is-rtti
Tout compilateur C ++ complet prendra certainement en charge RTTI. Si vous souhaitez essayer d'utiliser un IDE tiers (comme Eclipse avec le plugin Arduino), vous pouvez facilement l'activer. Mais cela ne vaut probablement pas la peine.
Alternative
Une solution plus performante (mais moins flexible) consisterait à utiliser une approche par classe de traits. Cela implique une méta-programmation de modèle génial:
Vous pouvez ajouter des
MAKE_TYPE_INFO(..)
lignes pour le type de votre choix, y compris les noms des classes personnalisées. Vous pouvez ensuite l'utiliser comme ceci:Tout ce que vous ne définissez pas en utilisant
MAKE_TYPE_INFO(..)
apparaîtra comme"unknown"
.C'est quelque chose d'assez avancé là-dedans, donc je n'essaierai pas d'expliquer comment tout cela fonctionne ici. Il existe différents didacticiels sur le Web sur la programmation de modèles C ++ si vous êtes intéressé.
EDIT: Il convient de noter que l'
typeof
opérateur n'est pas C ++ standard, mais est pris en charge par quelques compilateurs, tels que GCC. Il s'agit essentiellement d'un ancien équivalent dedecltype
, qui apparaît dans la norme C ++ 11.la source
J'utilise une approche stupide simple ...
Il s'agit du concept de polymorphisme où plusieurs fonctions avec différents types de paramètres sont créées mais avec le même nom de fonction . Pendant l'exécution, la fonction correspondant au bon nombre d'arguments et de type (s) d'argument sera appelée. J'espère que cette explication vous aidera.
la source