Wie kann ich den Typ einer Eingabevariablen innerhalb if
Klausel in C++ überprüfen? Wenn es eine Mitgliedsfunktion dafür gibt.Wie überprüft man den Typ der Variablen in der bedingten Anweisung
Antwort
Es hängt davon ab, welche Art prüft Sie tun möchten.
Die einfachste ist wahrscheinlich
#include <typeinfo> // for the `std::type_info` type
if (typeid(input_variable) == typeid(chosen_type))
{
// input_variable is of type chosen_type
}
Es ist auch möglich, die (Implementierung definiert) Namens-Zeichenketten zu überprüfen, die eine Art identifizieren
if (std::string(typeid(input_variable).name()) == typeid(chosen_type).name())
{
// input_variable is of type chosen_type
}
Die Umstellung auf std::string
für Vergleichsoperatoren zur Arbeit benötigt wird, , wie die .name()
Mitgliedsfunktion const char *
zurückgibt. Andernfalls vergleiche die name()
Mitglieder unter Verwendung strcmp()
(entweder in C <string.h>
oder in C++ <cstring>
- innerhalb Namensraum std
).
Berücksichtigen Sie, dass die von typeid(X).name
zurückgegebene Zeichenfolge die Implementierung definiert ist.
In C++ 11 hat der Typ type_info
einen hash_code()
Member, der auch verglichen werden kann. Die Werte hierfür sind in der Implementierung definiert und können zwischen den Ausführungen des Programms variieren. Darüber hinaus, wie Martin Bonner in Kommentaren erwähnt, kann hash_code()
falsche Positive für die Gleichheit geben (wenn hash_code()
s ungleich vergleichen, sind die Typen unterschiedlich, aber wenn sie gleich vergleichen die Typen können anders sein. Ich erwähne dies, nicht weil ich Anwalt hash_code()
s zu vergleichen, sondern weil die ursprüngliche Frage hat nicht erklärt, warum Vergleich von Typen gewünscht wird, so gibt es keine Grundlage, einen Test zu übernehmen, die falsche Übereinstimmungen ergeben könnte, wird nicht angemessen.
Es ist nicht garantiert, dass der hash_code für verschiedene Typen unterschiedlich ist. Mit anderen Worten, es ist ein guter Wert, um unordered_map zu füttern, aber nicht um Gleichheit zu beweisen (benutze 'typeinfo :: operator =()' dafür) –
Wie gesagt, es hängt von der Art des gewünschten Vergleichs ab. Wenn 'hash_code()' Ergebnisse nicht gleich sind, sind die Typen unterschiedlich. Wenn sie gleich sind, können die Typen * verschieden sein, so dass die Wahrscheinlichkeit falscher Übereinstimmungen ungleich null ist.Mögliche Vergleiche mit einer Wahrscheinlichkeit von falsch positiven (oder falsch negativen) Ergebnissen sind in einigen Anwendungen eine gültige Screening-Technik. – Peter
Genau! Ich habe nur kommentiert, weil das OP vielleicht den Eindruck hatte, dass die Gleichheit von 'hash_code()' die gleichen Typen bewiesen hat. –
Sie können zu verwenden versuchen:
typeid(yourvariable).name()
Sie müssen den folgenden Header enthalten es um die Arbeit:
#include <typeinfo>
eine einfache Lösung wäre die Verwendung der folgende:
#include<cassert>
struct B { static int cnt; };
int B::cnt = 0;
template<class T>
struct S: B { static int type; };
template<typename T>
int S<T>::type = B::cnt++;
template<typename T, typename U>
bool f(T, U) {
return S<T>::type == S<U>::type;
}
int main() {
assert(f(42, 0));
assert(!f(0, .0));
}
Sie können S<T>::type
in einer Guard-Anweisung oder wo immer Sie wollen verwenden.
Wenn Sie eine Variable haben x
genannt, ist eine Frage der wie etwas mit:
S<decltype(x)>::type
- 1. Wie überprüft man den Typ der Variablen? Python
- 2. Wie überprüft man den Typ der Variablen in ngIf in Angular2
- 3. Wie überprüft man den Typ der Param-Klasse?
- 4. Optimierung der bedingten Anweisung in SQL
- 5. Wie überprüft man den Zeichensatz der Zeichenfolge?
- 6. Wie überprüft man den leeren Wert in der cmd-Datei?
- 7. Get Typ der Variablen
- 8. Wie überprüft man den Typ des Felds struct in Elixir?
- 9. Summieren einer bedingten Anweisung
- 10. Wie erhält man den Typ einer Variablen in MATLAB?
- 11. Wie überprüft man den Typ einer AnyObject-Zelle?
- 12. Wie erfolgt die Initialisierung der bedingten Variablen zur Compilerzeit?
- 13. Problem mit der Logik in dieser bedingten Anweisung
- 14. Wie html in einer bedingten Anweisung zeigen
- 15. Wie überprüft man den Typ eines Wertes von einem JSONObject?
- 16. JVM Bytecode, wie finde ich den Typ der lokalen Variablen?
- 17. "Typ Fehler in bedingten" in Haskell
- 18. Wie sieht man den Typ einer Variablen in PL/SQL?
- 19. Korrekte Art, den Typ der Variablen in Python zu bestätigen
- 20. Wie überprüft man, ob die XSLT-Anweisung ausgeführt wurde
- 21. Wie überprüft man den Stil BS_AUTORADIOBUTTON der Schaltfläche
- 22. Wie überprüft man den Administrator der Google Apps Domain?
- 23. Wie überprüft man den Namenstatus?
- 24. Wie überprüft man, ob der Datensatz in der Datenbank existiert
- 25. Wie überprüft man den Array-Bereich?
- 26. Wie überprüft man den Migrationsstatus?
- 27. Muss die Funktionsdeklaration nicht innerhalb der bedingten Anweisung erscheinen?
- 28. Wie überprüft man, ob der Benutzer in der Ansicht Laravel
- 29. Umfang der Variablen in der case guard-Anweisung von scala
- 30. So prüfen Sie, ob der Typ der Variablen mit dem in einer Variablen gespeicherten Typ übereinstimmt
Mögliche Duplikat [? Wie kann ich den Typ einer Variablen erhalten] (http://stackoverflow.com/questions/ 11310898/how-do-i-get-the-type-of-variables) –
Bitte geben Sie einen Beispielcode an, um zu zeigen, was Sie tun möchten. – songyuanyao
Wenn Sie dies tun möchten, weist dies auf ein Designproblem hin. –