Wie mache ich den Lambda zum Freund einer Klasse?

8

Sagen wir, ich habe eine Klasse:

%Vor%

Und ich habe ein Lambda:

%Vor%

Gibt es eine Möglichkeit, ein privates Mitglied / Methode in einem Lambda zu verwenden? - Es ist nicht notwendig, den Zeiger auf das Lambda zu übergeben - es kann ein Capture-by oder etwas anderes sein.

Alle vernünftigen Systeme sind willkommen.

    
abyss.7 08.02.2014, 14:08
quelle

3 Antworten

13

Sie können es tun, indem Sie eine Friend-Funktion erstellen, die die Lambda-Funktion zurückgibt. Er erbt den Freundzugriff:

%Vor%     
Jaa-c 08.02.2014, 14:25
quelle
3

Um ein Lambda zu einem Freund zu machen, müssen Sie sich mit einer Klasse oder einer Funktion vertraut machen, bei der das Lambda definiert ist. Hier ist ein komplettes Beispiel:

%Vor%

Hier ist eine laufende Demo auf ideone.

    
dasblinkenlight 08.02.2014 14:20
quelle
1

mit std :: function benötigt zusätzliche Ressource, so dass ich freomode / method Funktion für den Zugriff auf private Mitglied empfohlen (Freund Funktion implizit inlined):

%Vor%

Live-Beispiel

EDIT: Ich persönlich mag std :: function, aber vergessen Sie nicht, std :: function benötigt immer zusätzliche Speicherressourcen und kann nicht inline sein. Wenn Sie also Ihre Quelle ohne std :: function implementieren können, Verwenden Sie nicht std :: function. Siehe Wie wird die std :: function implementiert? Auch Lambda to std :: function Konvertierungsleistung

    
Khurshid 08.02.2014 17:22
quelle

Tags und Links