lambda

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

lambda
Hallo Kollegen,

ich kriege einen Fehler, nachdem ich den Konstruktor mit lambda erweitert habe:

Vector (int numberOfElements, function f)

Error: [quote]
Vector.h:48:33: error: ‘function’ is not a type
Vector (int numberOfElements, function f)

[/quote]

PS: functional ist schon included.

Danke und Schöne Grüße :wink:


  1. namespaces
  2. hängt wieder von der Aufgabenstellung ab, aber bist du sicher, dass du kein Template verwenden willst, welches inlining ermöglichen würde?
1 „Gefällt mir“

laut Aufgabestellung muss man den Konstruktor mit Lambda aufrufen:

Vector b(num , /insert lambda here/ );

anschließend soll die Funktion jeden Wert des Vectors berechnen…

Ich dachte mir ich definiere erstmal die Function f im Konstruktor …


Naja, so wie du das machst, sollte das schon funktionieren (wenn du den namespace von [m]function[/m] dazugeschrieben hast).

Da function aber beliebige Funktionen Kapseln kann, kommt es vermutlich beim Benutzen des Klammeroperators in deiner [m]b[/m] Methode zu einem (dynamischen) Sprung in deine Methode.

Führt jetzt vielleicht etwas zu weit, aber die Alternative wäre den Typ des Funktionsparameters zu einem Template Parameter zu machen (den kann der Compiler auch automatisch erkennen, du musst ihn beim Aufruf der Methode also nicht angeben, was mit Lambdas ohnehin nicht so einfach wäre). Dann instanziiert der compiler genau eine [m]b[/m]-Methode für dein später verwendetes Lambda, kennt damit den Code, und kann ihn inlinen. Relevant ist das natürlich nur, wenn die Methode in einem Performance-Kritischen Bereich ist. Dann kannst du’s ja mal so und mal anders benchmarken :slight_smile:

1 „Gefällt mir“

vielen Dank! :wink: