Wie kann ich herausfinden, ob std :: type_index für meinen Compiler eindeutig ist?

8

Schreibt der Standard vor, dass ein Aufruf von std::type_index(typeid(obj)) für diesen Typ eindeutig ist? Ich konnte dazu keine Informationen finden. Von type_info::name() habe ich folgendes bekommen:

  

Gibt eine implementierungsdefinierte nullterminierte Zeichenfolge zurück   enthält den Namen des Typs. Keine Garantien sind gegeben, in   Insbesondere kann die zurückgegebene Zeichenfolge für mehrere Typen identisch sein   Wechsel zwischen den Aufrufen des gleichen Programms.

(Quelle: Ссылка )

Was mich zu der Annahme verleitet, dass die verstümmelten Namen / Typiden nicht sind. Die Seite für std::type_index verwendet jedoch speziell die Annahme dieser Typen einzigartig in seinem " Anwendungsbeispiel ".

Wie kann ich also wissen, ob typeid für meinen Compiler eindeutig ist und wie groß die Wahrscheinlichkeit für eine Kollision ist? Gibt es irgendeine Möglichkeit, eine Art von Bezeichner (ob String oder anders) zu erhalten, die wir kennen können?

Demangling ist keine Option, da es für sehr große Typen zu langsam ist, aber meine Vermutung ist, dass der mangled Name dafür eindeutig sein sollte, wenn die Implementierung die Möglichkeit bietet, einen Namen zu entmutigen Tippe diese Implementierung trotzdem ein, richtig?

    
arman 07.11.2014, 05:52
quelle

1 Antwort

6

Die Funktion name auf einem type_info wird nicht als nützlich angesehen. Eine Implementierung könnte wahrscheinlich "" für alles zurückgeben und konform sein. In der Praxis ist es nicht immer "" , und es kann zum Debuggen verwendet werden, aber nur das.

type_info == und before und hash_code verlassen sich jedoch nicht auf name .

type_index ist ein Wrapper um einen Zeiger auf ein type_info , der die Methoden der Info verwendet, um einen regulären Typ zu erzeugen (kann kopiert, gespeichert usw. werden). Es ist für verschiedene Typen unterschiedlich.

    
Yakk 07.11.2014, 11:37
quelle

Tags und Links