Was ist der Unterschied zwischen std :: function und std :: mem_fn?

7

Ich habe Probleme, den Unterschied zwischen den beiden Funktionswrappern std::function und std::mem_fn . Aus der Beschreibung scheint mir, dass std :: function alles std::mem_fn und mehr tut. In welchem ​​Fall würde man std::mem_fn über std::function ?

verwenden     
Vicksters 07.05.2015, 16:17
quelle

2 Antworten

19

Sie können std::function nicht wirklich mit std::mem_fn vergleichen. Die erste ist eine Klassenvorlage, deren Typ Sie angeben, und die zweite ist eine Funktionsvorlage mit einem nicht angegebenen Rückgabetyp. Es gibt wirklich keine Situation, in der Sie tatsächlich einen gegen den anderen betrachten würden.

Ein besserer Vergleich könnte zwischen mem_fn und std::bind liegen. Dort wird mem_fn für den spezifischen Anwendungsfall eines pointer-to-member viel weniger ausführlich, wenn Sie nur alle Argumente durchlaufen wollen. Bei diesem einfachen Typ:

%Vor%

Wie würden Sie einen Funktor erstellen, der getX() nur für eine gegebene A aufruft?

%Vor%

Und nimmt ein zusätzliches Argument für add ?

%Vor%

So mem_fn ist in diesem Fall prägnanter . Wenn wir jedoch ein bestimmtes Argument binden möchten, sagen wir Aufruf add(5) für eine gegebene A , können Sie das nur mit bind tun:

%Vor%

Letztendlich kein Vergleich zwischen function und mem_fn , aber es gibt Zeiten, die mem_fn zu bind bevorzugen.

    
Barry 07.05.2015, 16:35
quelle
9

Der von std::mem_fn zurückgegebene Wrapper ist extrem leicht; Es ist ein dünner Wrapper um einen Zeiger auf Mitglied.

std::function verwendet Typ löschen, das ist viel mehr Schwergewicht.

    
T.C. 07.05.2015 16:32
quelle

Tags und Links