Erhalte den Basistyp eines Schablonentyps (entferne const / reference / etc.)

8

Gibt es eine Vorlage für Typeigenschaften, die den Basistyp eines bestimmten Typs zurückgibt. Mit Basistyp meine ich den Typ, bei dem alle Wertmodifikatoren, const, volatile usw. entfernt sind. Zum Beispiel mit einer hypothetischen Merkmalfunktion:

%Vor%

Ich kenne remove_const und remove_reference und verwende sie momentan nur in Kombination. Ich frage mich, ob es jedoch bereits eine solche Eigenschaft gibt und vielleicht, wenn es einen richtigen Namen für das gibt, was ich meine?

    
edA-qa mort-ora-y 25.05.2013, 12:27
quelle

3 Antworten

10

Ich würde wahrscheinlich einen Typalias definieren wie:

%Vor%

Beachten Sie, dass hier R. Martinho Fernandes schlägt den Namen Unqualified für einen solchen Alias ​​vor.

Die Standardart std::decay funktioniert auf der anderen Seite genauso wie oben < em> und etwas mehr für Array-und Funktionstypen, die oder nicht sein kann, was Sie wollen.

    
Andy Prowl 25.05.2013, 12:35
quelle
4

probiere std::decay . Es simuliert, was passiert, wenn Sie Argumente an Funktionen nach Wert übergeben: strip-cv-qualifikatoren auf oberster Ebene, Referenzen, konvertiert Arrays in Zeiger und Funktionen, um Zeiger zu funktionieren.

Grüße, & amp; rzej

    
Andrzej 25.05.2013 12:38
quelle
1

Offensichtlich hängt es davon ab, was genau Sie vom Typ entfernen möchten. std :: cease könnte das sein, nach was Sie suchen (entfernt Verweise, const/volatile , verfällt Array Zeiger und Funktion zum Funktionszeiger). Wenn Sie nicht möchten, dass das Array Zeiger und Funktion zum Verfall von Funktionspointern verwendet, müssen Sie bei std::remove_reference und std::remove_cv bleiben (entfernt const und volatile ). Natürlich könntest du die beiden zu deinem eigenen Typtrait kombinieren, um es einfacher zu machen.

    
Grizzly 25.05.2013 12:35
quelle

Tags und Links