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