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
?
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:
Wie würden Sie einen Funktor erstellen, der getX()
nur für eine gegebene A
aufruft?
Und nimmt ein zusätzliches Argument für add
?
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:
Letztendlich kein Vergleich zwischen function
und mem_fn
, aber es gibt Zeiten, die mem_fn
zu bind
bevorzugen.
Tags und Links c++ c++11 stl function-pointers