Kann ich curlopt_writefunction mit einem C ++ 11 Lambda-Ausdruck verwenden?

9

Ich habe versucht, einen C ++ 11-Lambda-Ausdruck mit CURLOPT_WRITEFUNCTION zu verwenden, aber das Programm stürzt zur Laufzeit mit einer Zugriffsverletzung ab. Ich bin mir nicht sicher, wie ich dies aufgrund des Mangels an C ++ 11-Kenntnissen weiter untersuchen sollte, aber vielleicht hat jemand anderes eine Idee, wie man das funktioniert.

Die Funktion:

%Vor%

Der Fehler:

  

Unbehandelte Ausnahme bei 0x000000cc in lpip_dl.exe: 0xC0000005: Zugriffsverletzung bei Position 0x00000000000000cc.

     

(Zugriffsverletzung bei Position 0x00000000000000cc)

Erscheint, wenn curl den Rückruf verwenden möchte:

%Vor%     
Strayer 08.07.2011, 12:50
quelle

2 Antworten

1

libcurl ist eine einfache C-Bibliothek, Sie müssen einen Rückruf festlegen, der von einem solchen aufgerufen werden kann. Das bedeutet, dass lustige C ++ - Dinge zuerst "cifiziert" werden müssen, um zu funktionieren. Wie in einen alten Funktionszeiger.

Dies wird auch im libcurl-FAQ-Eintrag " Nicht-statische C ++ - Funktionen für Rückrufe verwenden? behandelt "

Siehe auch: Callbacks im C-Stil in C ++ 11

    
Daniel Stenberg 02.09.2011, 06:47
quelle
8

Sie können das tatsächlich tun, indem Sie die Lambda-Funktion auf den Funktionszeiger anwenden. Sie können zuerst einen Typedef machen, um die Umwandlung zu vereinfachen.

%Vor%

Dann verwendest du static_cast.

%Vor%

Hinweis: Um in den C-Funktionszeiger zu konvertieren, können Sie nur leere Captures [] verwenden.

    
quelle

Tags und Links