Übergeben mehrerer Argumente an eine Thread-Funktion

7

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.

    
soandos 07.05.2012, 18:15
quelle

2 Antworten

7

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

Was ist ein Lambda-Ausdruck in C ++ 11?

    
stefan bachert 07.05.2012, 18:19
quelle
13

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.

    
juanchopanza 07.05.2012 18:31
quelle