std::forward<Function>(func)()
-
Hallo,
ist das Mist? Ich frage nach, weil ich das manchmal so gelesen gemeint zu haben ich selber mache das aber irgendwie nie, weil ich nicht erkenne, dass da func irgendwo perfekt hingeschoben werden soll... Oder irre ich mich da?
-
-
Es behält die value category des Funktors bei. Das ist per se nicht 'ziemlich sinnlos', wie ein Vorposter von mir zum Besten gegeben hat, sondern notwendig, um in generischem Code das richtige Verhalten zu garantieren—wie bspw. in
std::invoke
. Die Implementierung auf cppreference zeigt das auch:template <class F, class... Args> decltype(auto) INVOKE(F&& f, Args&&... args) { return std::forward<F>(f)(std::forward<Args>(args)...); }
Dafür muss man allerdings ein Interface mit einem entsprechenden Verhalten anbieten, was fast nie vorkommt.
-
-
@Swordfish Es gibt einen Unterschied zwischen einer Antwort, die irreführend/falsch ist, und der, die den Ausnahmefall expliziert. Wenn ein Funktor mittels forwarding reference angenommen worden ist, sollte die value category prinzipiell nicht ignoriert werden (wer sagt, dass man einen
operator()
nicht für rvalues überladen kann?).
-
Ja. Ich schätze Dich dafür, daß Du den Ausnahmefall explizierst. Brauchst meine Antwort trotzdem nich runtermachen, h4x02.
-
Wenn hier einer jemandes Antworten runtergemacht hat...
-
*duck'n run* Bist Du eigentlich immer noch in GB? Wie gehst Du mit dem Brexit um ... oder ist es dir egal und betrifft Dich nicht?
-
Ahja, das stimmt allerdings
#include <utility> struct foo{ void operator()() && {} }; template<typename Function> void f(Function&& callback){ std::forward<Function>(callback)(); } int main(){ foo x; f(std::move(x)); }
Dann will ich mich mal bedanken.
-
-
@Swordfish Ich arbeite in London, und nein, die schmeißen mich noch nicht raus. Aber ich hab langsam genug davon, jeden Morgen in einer
SardinenbüchseBahn zu stehen, also ziehe ich wahrscheinlich in einem Jahr oder so zurück nach Deutschland. Dann wird mein Leben auch weniger chaotisch sein, ergo mehr Zeit um deutschsprachige C++ Aspiranten zu begeistern. Leider mach ich dann nicht so ein Asche wie mit HFT, aber auch ein arroganter junger Hacker lernt seine Lektion!
Wie läuft's denn bei dir so?
-
@Columbo sagte in std::forward<Function>(func)():
Aber ich hab langsam genug davon, jeden Morgen in einer
SardinenbüchseBahn zu stehen,lol
Wie läuft's denn bei dir so?
Ehrlich? Beschissen.
-
Wenn du so viel Asche machst, kannst du dir nicht einfach ein Auto leisten (evlt. mit einem Chauffeur)?
-
Dieser Beitrag wurde gelöscht!
-
@Mechanics ich habe keinen Führerschein, und zweitens ist viel Asche kein Grund sie rauszuschmeissen
-
Ich bin selber auch nur mit dem Fahrrad unterwegs. Keine Ahnung, wie gut man in London radfahren kann, hab grad gegoogelt und angebtlich wurde die Situation in letzter Zeit stark verbessert.
Weiß natürlich nicht, was du sonst alles für Gründe hast, aber wenn das der einzige Grund ist, lässt sich doch bestimmt eine Lösung finden. Und wenn du woanders dann viel weniger verdienst, hast dann vielleicht auch keine Asche mehr zum Rausschmeißen
-
@Mechanics sagte in std::forward<Function>(func)():
Ich bin selber auch nur mit dem Fahrrad unterwegs.
Me too
Hier in Salzburg wäre auch alles andere purer Masochismus ... find' mal 'nen Parkplatz ...
-
@Mechanics Ich bin in Cambridge nur Rad gefahren, einer Stadt die für radbewusste Autofahrer bekannt ist, und selbst dort war es mir nicht geheuer. Meine Entscheidung zurück zu ziehen hat auch weniger mit der Bahn zu tun (ziehe März nah an die Arbeit) sondern mit meiner verlobten, die in Deutschland lebt.