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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

19.07.2012, 19:56

Als ich mir den Code zum erstenmal angesehen habe hab ich kein Wort verstanden aber dann habe ich gelesen das das eine Lambda-Funktion ist. Da ich Lambda nur aus C# kenne würde ich gerne Wissen was das [] und [=] vor der Parameterliste bedeuten soll.

Das [] ist der Lambda Introducer, also einfach die Syntax die sagt: Da kommt jetzt ein Lambda. In die [] kannst du die Namen von Variablen schreiben, die aus dem umgebenden Scope gecaptured werden sollen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int x = 42;

auto my_func = [x]()
{
  cout << x;
};

x = 23;

my_func();  // gibt 42 aus


Du kannst Variablen auch by Reference capturen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int x = 42;

auto my_func = [&x]()
{
  cout << x;
};

x = 23;

my_func();  // gibt 23 aus


Anstatt einzelne Namen anzugeben, kannst du auch einfach nur ein = schreiben. Das captured dann sämtliche Variablen aus dem umgebenden Scope by Value. Nur ein & captured sämtliche Variablen by Reference. Auch Kombinationen sind möglich, also z.B. alles by Value außer y by Reference etc.


[...]

Hier verstehe ich wieder nix^^

1. Die Parameterliste des Lambda möchte ein ID3D11Buffer**, wo wird der übergeben?

Im Konstruktor des com_ptr

2. Müsste der Lambda nicht eigentlich einen return ID3D11Buffer* haben damit der com_ptr<ID3D11Buffer> vb daraus einen ID3D11Buffer** macht?

Wäre auch eine Lösung. So wie es in meinem Beispiel oben ist, braucht die Lambda Function nichts zurückgeben, da der com_ptr einen Pointer auf den Pointer, der das Ergebnis bekommt, an das Lambda übergibt, welches das Ergebnis dort dann reinschreibt.
Den Beitrag solltest du aber sowieso eher als Gedankenspiel betrachten ;)