Ich verwende Arduino und möchte wissen, ob es eine Funktion gibt, die den Datentyp einer Variablen zurückgibt. Das heißt, ich möchte Folgendes ausführen:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Antworten:
In einem typischen C ++ - Programm würden Sie den
typeid
Operator folgendermaßen verwenden:Dies erfordert jedoch eine Compilerfunktion namens Runtime Type Information (RTTI). Es ist in der Arduino IDE deaktiviert, vermutlich weil es dazu neigt, den Laufzeitspeicherbedarf des Programms zu erhöhen.
Weitere Informationen zu den Ressourcenkosten erhalten Sie hier: /programming/579887/how-expensive-is-rtti
Jeder voll funktionsfähige C ++ - Compiler wird RTTI jedoch definitiv unterstützen. Wenn Sie versuchen möchten, eine IDE eines Drittanbieters (z. B. Eclipse mit dem Arduino-Plugin) zu verwenden, können Sie diese problemlos aktivieren. Es ist wahrscheinlich nicht die Mühe wert, nur dafür.
Alternative
Eine leistungsstärkere (aber weniger flexible) Lösung wäre die Verwendung eines Merkmalsklassenansatzes. Dies beinhaltet einige funky Template-Meta-Programmierung:
Sie können
MAKE_TYPE_INFO(..)
Zeilen für jeden gewünschten Typ hinzufügen , einschließlich der Namen benutzerdefinierter Klassen. Sie könnten es dann so verwenden:Alles, was Sie nicht mit definieren,
MAKE_TYPE_INFO(..)
wird als angezeigt"unknown"
.Das sind ziemlich fortgeschrittene Sachen, also werde ich nicht versuchen zu erklären, wie das alles hier funktioniert. Es gibt verschiedene Tutorials im Web über die Programmierung von C ++ - Vorlagen, wenn Sie interessiert sind.
BEARBEITEN: Es ist erwähnenswert, dass der
typeof
Operator kein Standard-C ++ ist, sondern von einigen Compilern wie GCC unterstützt wird. Es ist im Grunde ein älteres Äquivalent vondecltype
, das im C ++ 11-Standard erscheint.quelle
Ich benutze einen einfachen dummen Ansatz ...
Dies ist das Konzept des Polymorphismus, bei dem mehrere Funktionen mit unterschiedlichen Parametertypen mit demselben Funktionsnamen erstellt werden . Zur Laufzeit wird die Funktion aufgerufen, die der richtigen Anzahl von Argumenten und Argumenttypen entspricht. Hoffe diese Erklärung hilft.
quelle