Ich habe Probleme herauszufinden, den Unterschied zwischen den beiden Funktionen wrappers std::function
und std::mem_fn
. Aus der Beschreibung scheint mir, dass std :: function tut alles std::mem_fn
tut und mehr. In welchem Fall würde man std::mem_fn
über std::function
verwenden?Was ist der Unterschied zwischen std :: function und std :: mem_fn
Antwort
Sie können std::function
mit std::mem_fn
nicht wirklich 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 möchten. Aufgrund dieser einfachen Art:
struct A {
int x;
int getX() { return x; }
int add(int y) { return x+y; }
};
A a{2};
Wie würden Sie einen Funktor machen, die gerade getX()
auf einem bestimmten A
nennt?
auto get1 = std::mem_fn(&A::getX);
auto get2 = std::bind(&A::getX, _1);
get1(a); // yields 2
get2(a); // same
Und nimmt ein zusätzliches Argument für add
?
auto add1 = std::mem_fn(&A::add);
auto add2 = std::bind(&A::add, _1, _2);
add1(a, 5); // yields 7
add2(a, 5); // same
So ist mem_fn
prägnante in diesem Fall. Wenn wir jedoch ein bestimmtes Argument, sagen wir rufen add(5)
auf einem bestimmten A
, man kann nur das tun, mit bind
binden wollte:
auto add_5 = std::bind(&A::add, _1, 5);
add_5(a); // yields 7
Letztlich kein Vergleich zwischen function
und mem_fn
, aber es gibt Zeiten mem_fn
bevorzugen zu bind
.
Das von std::mem_fn
zurückgegebene Wrapper ist extrem leicht; Es ist ein dünner Wrapper um einen Zeiger auf ein Mitglied.
std::function
verwendet Typ löschen, die viel schwerer ist.
- 1. std :: mem_fun vs std :: mem_fn
- 2. Was ist der Unterschied zwischen std :: cout und std :: wcout?
- 3. Was ist der Unterschied zwischen std :: set und std :: map
- 4. Was ist der Unterschied zwischen std :: partial_sum und std :: inclusive_scan?
- 5. Was ist der Unterschied zwischen std :: tie und std :: make_tuple mit std :: ref-Argumenten?
- 6. Unterschied zwischen std :: mutex lock function und std :: lock_guard <std::mutex>?
- 7. Unterschied zwischen std :: Suche und std :: find_first_of
- 8. Unterschied zwischen Std: String und Std :: String
- 9. Unterschied zwischen std :: set und std :: priority_queue
- 10. std :: bind std :: function?
- 11. Was ist der Unterschied zwischen Boost Smartpointern und Std Smartpointern?
- 12. std :: mem_fn mit ref_qualifizierten Elementfunktionen
- 13. Was ist der Unterschied zwischen `$ (window) .load (function() {})` und `$ (function() {})`
- 14. Javascript: Was ist der Unterschied zwischen $ (function() {}); und function() {}
- 15. Was ist der Unterschied zwischen std :: string und std :: basic_string? Und warum werden beide benötigt?
- 16. Unterschied zwischen std :: exception und "..."
- 17. std :: vector von std :: function
- 18. std :: function und std :: bind Verhalten
- 19. Understanding std :: function und std :: bind
- 20. Unterschied zwischen std :: uninitialized_copy & std :: copy?
- 21. Was ist der Unterschied zwischen std :: string :: c_str und std :: string :: data?
- 22. Was ist der Unterschied zwischen std :: to_string, boost :: to_string und boost :: lexical_cast <std::string>?
- 23. Was ist der Grund für den Unterschied im Zerstörungsverhalten zwischen std :: unique_ptr und std :: shared_ptr?
- 24. Unterschied zwischen std :: regex_match & std :: regex_search?
- 25. std :: function -> Funktionszeiger
- 26. G ++, clang ++ und std :: function
- 27. Unterschied zwischen Vektor :: begin() und std :: begin()
- 28. Was ist der Unterschied zwischen den Keywords `fun` und` function`?
- 29. Unterschied zwischen std :: end (myVector) und myVector.end()
- 30. std :: function implizite Typumwandlung
Meinst du 'std :: function' vs. den Rückgabetyp von' std :: mem_fn'? Der Vergleich einer Klassenvorlage mit einer Funktionsvorlage macht mir wenig Sinn. – chris