Warum Standard-Container-Iteratoren '- *' nicht überladen?

9

Anscheinend funktioniert ->* nicht automatisch, wenn Sie -> überladen, und muss manuell überladen werden.

Warum Iteratoren für Standardcontainer ->* nicht zusätzlich zu -> überladen, erzwingen die Verwendung von (*iter).*mem_ptr anstelle von iter->*mem_ptr ?

%Vor%     
HolyBlackCat 05.02.2018, 15:34
quelle

1 Antwort

2

Mit dem Vorbehalt, dass diese Fragen normalerweise nicht zu beantworten sind, hier ein paar Gründe, warum operator->*() möglicherweise nicht überlastet ist. Obwohl es möglich ist, ist die wirkliche Antwort, dass niemand daran gedacht hat. Und wenn dies für Sie eine wichtige Funktion für fehlende Sprachen ist, können Sie ein Angebot einreichen .

>

Für Anfänger ist ptr->*pmd im Allgemeinen kein sehr gebräuchlicher Ausdruck. Die Tatsache, dass du it->*pmd nicht schreiben kannst, ist etwas, was die meisten Leute nicht vermissen, besonders wenn (*it).*pmd genau dasselbe Ziel erreicht, allerdings auf Kosten von nur 2 zusätzlichen Charakteren. Das potenzielle Aufwärtspotenzial scheint hier eher gering zu sein. Dennoch sollten Iteratoren konsistent mit Zeigern sein, also würde es Sinn machen. Aber ...

Zeiger auf Member sind nicht nur Zeiger auf Member-Daten, wir können auch Zeiger auf Member-Funktionen haben und können (ptr->*pmf)() today schreiben, wobei ptr->*pmf für sich schlecht formatiert ist. Sie können diese Semantik überhaupt nicht mit operator->* erhalten - um die Aufrufoperation zum Laufen zu bringen, müsste ptr->*pmf im Grunde ein Lambda zurückgeben. So, jetzt, das wird tatsächlich ziemlich kompliziert - es sei denn, Sie möchten ptr->*pmd nur unterstützen. Bei jedem Ansatz sind Sie mit Zeigern nicht einverstanden.

Bei Eingabe-Iteratoren möchten Sie operator->*() überhaupt nicht unterstützen, da dies zu einer sofortigen Referenzierung führen würde.

Für mich persönlich sind die Kosten (herauszufinden, wie man diese Operatoren spezifiziert, für welche Iteratoren und was man mit Zeigern zu Elementfunktionen tun soll) nicht wirklich sinnvoll (2 Zeichen in einem Ausdruck, der selten ist) geschrieben).

    
Barry 06.02.2018, 14:09
quelle