Warum kann ich den "this" -Zeiger nicht mit einem Lambda erfassen?

8

Betrachten Sie den folgenden Code:

%Vor%

In VC2010 führte die Verwendung von this anstelle von a zu Kompilierungsfehlern. Unter anderem:

%Vor%

Was ich nicht verstehe. Bedeutet es, dass es nicht weiß, ob es eine Referenz verwenden oder kopieren soll? Wenn Sie &this verwenden, um die Referenzierung zu erzwingen, wird auch Folgendes angezeigt:

%Vor%

Das Provisorium ist nicht so nervig, aber aus Neugier, gibt es einen Weg, es loszuwerden? Was passiert, wenn this einem Lambda gegeben wird?

    
Gabriel 19.10.2011, 19:05
quelle

2 Antworten

6

Dies scheint ein Compilerfehler in VS2010 zu sein. Ich konnte es funktionieren lassen, indem ich das innere Lambda this implizit erfassen ließ:

%Vor%
  

Wenn Sie versuchen, & zu verwenden, um das Referenzieren zu erzwingen, heißt es auch:

     

1 & gt; main.cpp (20): Fehler C3496: 'Dies' wird immer vom Wert erfasst: '& amp;' ignoriert

this kann nur nach Wert erfasst werden. [=] und [&] erfassen beide nach Wert.

  

Was passiert, wenn das einem Lambda gegeben wird?

Ich weiß es nicht, aber es muss etwas Besonderes sein, weil Sie this in einem Lambda nicht als Zeiger auf das Lambda-Objekt verwenden können. Alles andere, was erfasst wurde wird zu einem privaten Mitglied des Lambda, also vermutlich auch this , aber es gibt eine spezielle Handhabung bei der Verwendung.

    
David 21.10.2011, 19:54
quelle
2

Dies ist ein bekannter Fehler beim Visual Studio 2010-Compiler (wie von Frédéric Hamidi kommentiert).

Sie müssen this explizit erfassen, um es an die Capture-Spezifikation einer anderen Lambda zu übergeben. Dies gilt auch für lokale Variablen, die außerhalb des Lambda-umgebenden Lambda deklariert sind, selbst bei einer [&] Capture-Spezifikation.

    
MSN 21.10.2011 20:15
quelle

Tags und Links