Ist es möglich, ein Feld von `std :: pair` ohne Hacks zu" konstituieren "?

In C ++ kompiliert das den folgenden Code:

std::pair <int, int>  x;
static_cast <std::pair <const int, int>*> (&x);

gibt einen Fehler aus:

error: invalid static_cast from type ‘std::pair<int, int>*’ to type ‘std::pair<const int, int>*’

Ich verstehe mehr oder weniger, warum dies passiert, da die CV-Qualifizierung eines Typs in einer Vorlagenparameterliste im Prinzip zu einem "inkompatiblen" Ergebnis führen kann. Und selbst wenn dies in diesem Fall nicht der Fall ist, kann der Compiler es nicht wissen.

Wie auch immer,ibt es eine nicht-hackische Möglichkeit, diese Konvertierung durchzuführe? Ich bin vorsichtig bei der Verwendung vonreinterpret_cast für alles, was ich bisher durch Tippfehlerprobleme gemacht habe. Außerdem kann ich keine temporären Dateien verwenden, da dies in leistungskritischem Code enthalten ist.

BEARBEITEN

Hier ist was ich tue. Ich implementiere eine benutzerdefinierte Containerschnittstelle, die mit @ kompatibel isstd::unordered_map. Aus diesem Grund ist seinvalue_type muss ein @ sepair <const key_type, mapped_type>. Für einige Optimierungen muss ichim Innere speichere die Werte alspair <key_type, mapped_type>, ohneconst. Wenn ich das aber mache, kann ich nicht (ohnereinterpret_cast) Implementiere Iteratoren über den Container, da sie Verweise auf Werte zurückgeben müssen und ich nur Verweise auf diese Nicht-Konstanten-Paare habe.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage