2016-09-08 12 views
2

Warum brauchen wir std::invoke, wenn wir bereits std::function haben? Was ist der Unterschied zwischen ihnen? Beide verwendeten Callable Objects. Was ist der Punkt, um eine neue Vorlage hinzuzufügen?Was ist der Unterschied zwischen std :: invoke und std :: function?

+13

Wir haben schon ein Auto. Warum brauchen wir die Farbe Grün? (Kurz gesagt, auf welche Weise sind diese beiden Dinge ** ähnlich ** ???) – Yakk

+6

'std :: invoke' und' std :: function' machen nicht die gleiche Sache überhaupt – David

+3

Watch this [cppcon 2015 Diskussion von Stephan T. Lavavej] (https://www.youtube.com/watch?v=zt7ThwVfap0) – NathanOliver

Antwort

8

std::invoke ist eine generische Art und Weise jede aufrufbar zu aktivieren - ein std::function, ein Zeiger auf Funktion, einen Zeiger auf Member-Funktion, ein Funktionsobjekt usw. Ohne zu wissen, was man Sie es zu tun (und ohne zu haben, Verwenden Sie eine andere Syntax). Es ist vor allem in generischen Programmen (Templates) nützlich.

Eine Standardfunktion auf der anderen Seite ist ein generischer Container für ein aufrufbares "Ding". Gar nicht gleich.

Verwandte Themen