Ich habe eine Funktion namens workForThread, die zwei Argumente benötigt und void zurückgibt. Ich möchte diese Funktion mit etwas wie folgt fädeln:
%Vor% Wobei a
und b
von den entsprechenden Typen sind. Der obige Code wird nicht kompiliert und gibt einen Fehler "zu viele Argumente für Aufruf" ("Fehler C2197: void (__cdecl *) (char *)"): zu viele Argumente für Aufruf ")
Wie kann ich das beheben?
Hinweis: Ich habe mir angeschaut diese zwei Fragen, aber die Auflösungen, die dort funktionieren, scheinen für mich nicht zu funktionieren. Außerdem habe ich das Gefühl, dass es einen Weg gibt, es in c ++ 11 zu integrieren, und genau das suche ich.
Wenn Sie C ++ 11 verwenden, können Sie eine Lambda-Funktion verwenden, die den (nicht-formalen) Parameter des Kontextes verwendet. "Erfassen"
Etwas wie
%Vor%Wenn nur eine einzelne juanchopanza-Antwort aufgerufen wird, kann dies etwas effizienter sein, da keine neue Funktion erstellt wird.
Mit der Lambda-Version können Sie mehr konfigurieren. Nehmen wir an, Sie starten Threads, die am Ende 2 Funktionen von 3 aufrufen. Der Ansatz von juanchopanza würde NAMED-Funktionen für jede Permutation erfordern.
Im Moment halte ich den Unterschied beider Ansätze für eine Frage des Geschmacks.
Wenn Sie mehr über Lambda-Funktionen lesen möchten
In C ++ 11 ist die Vorgehensweise mehr oder weniger so, wie Sie es versucht haben:
%Vor%workForThread ist eine (Nicht-Member-) Funktion, die diese beiden Parameter verwendet.
Tags und Links c++ multithreading c++11 visual-studio-2012 visual-c++