Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Puschie

Frischling

  • »Puschie« ist der Autor dieses Themas

Beiträge: 25

Wohnort: Sachsen-Anhalt

  • Private Nachricht senden

1

23.01.2014, 21:15

lambda function definition(gelöst)

Hey, seid einigen Wochen habe ich mich mit Lambda expression auseinander gesetzt.
Nun ist die Frage aufgekommen, wann und wo ich am besten lambda functionen definiere.

Zurzeit nutzte ich einige Lambda Function in functionen die mehrere male pro sekunde aufgerufen,
da würde ich gern wissen, ob ich das vermeiden sollte ?

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
void update()
{
   auto func = [&] (Node* node) -> bool
    {
        if( node->shouldRemoved() )
        {
         _graph.deleteChild( *node );
         return true;
        } return false;
    };
_graph.foreach( func );
}
MFG Puschie

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Puschie« (25.01.2014, 14:51) aus folgendem Grund: Fehler im Code [] -> [&]


rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

2

24.01.2014, 09:47

Nein, das kannst du machen. Die Lambdafunktion wird nur ein einziges mal übersetzt und dann aufgerufen. Wenn die Funktion, der du sie übergibst dazu geeignet ist, wird sie in den meisten Fällen sogar ganz normal geinlined.

Puschie

Frischling

  • »Puschie« ist der Autor dieses Themas

Beiträge: 25

Wohnort: Sachsen-Anhalt

  • Private Nachricht senden

3

24.01.2014, 13:48

Ah, vielen Dank.
Muss ich doch keine lambda functions verwaltung machen^^.
MFG Puschie

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

24.01.2014, 13:51

Lambda-Funktionen werden ganz normal zur Kompilierzeit übersetzt, nicht etwa zur Laufzeit.
Das wäre auch gar nicht möglich, ohne deiner Anwendung den C++-Compiler mitzugeben.
Da steckt nicht viel Magie hinter (ein bisschen schon!) ;)
Im Prinzip bieten sie dir nur eine einfache Möglichkeit, Funktionen an Ort und Stelle zu definieren, wo sie gebraucht werden.

Übrigens:
Musst du in deinem Code nicht eigentlich angeben, dass du _graph als Referenz capturen willst?
Also so: auto func = [&_graph] (Node* node) -> bool ...

Puschie

Frischling

  • »Puschie« ist der Autor dieses Themas

Beiträge: 25

Wohnort: Sachsen-Anhalt

  • Private Nachricht senden

5

25.01.2014, 14:14

Übrigens:
Musst du in deinem Code nicht eigentlich angeben, dass du _graph als Referenz capturen willst?
Also so: auto func = [&_graph] (Node* node) -> bool ...
Da ich die Lambda Function innerhalb einer Klasse definiere, kann man per [&] auf alle (auch private) Klassenvariabeln und Funktionen zugreifen.

Hmm, gut das ist wirklich nicht ersichtlich aus dem Code-Beispiel, dass Update-Funktion ist bestand einer Klasse.
MFG Puschie

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Puschie« (25.01.2014, 14:21)


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

6

25.01.2014, 14:19

Ja, aber in deinem Code ist kein [&] angegeben, sondern [].

Puschie

Frischling

  • »Puschie« ist der Autor dieses Themas

Beiträge: 25

Wohnort: Sachsen-Anhalt

  • Private Nachricht senden

7

25.01.2014, 14:50

Ja, aber in deinem Code ist kein [&] angegeben, sondern [].
Achos, danke hab ich ganz übersehen
MFG Puschie

Werbeanzeige