Am Mittwoch, 2. Mai 2012 14:28:52 UTC+2 schrieb Andreas Tscharner:
> Hallo Welt,
>
> Ich habe z.B. folgende Klasse
>
> class CalcClass
> {
> private:
> double (CalcClass::*convert)(double);
Hier liegt dein Problem: convert ist kein Funktionszeiger (function pointer), sondern ein Elementfunktionszeiger (pointer to member). Ein zustandsloser Lambda-Ausdruck ist konvertierbar zu einem Funktionszeiger, nicht aber zu einem Elementfunktionszeiger.
> public:
> CalcClass(bool);
>
> double calculate(double, double);
> };
>
> In meinem Konstruktor möchte ich nun, anhängig von dem übergebenen
> bool - Wert den Funktionspointer mit einer Lambda Funktion "füllen":
>
> CalcClass::CalcClass(bool p_inches)
> {
> if (p_inches)
> convert = [](double p_mm)->double { return p_mm/25.4; };
> else
> convert = [](double p_mm)->double { return p_mm; };
> }
Damit dies geht, solltest du 'convert' anders definieren. Es gibt keinen Grund (in deinem Beispiel jedenfalls nicht), warum es ein Elementfunktionszeiger sein müsste. Ändere die Definition einfach ab zu:
double (*convert)(double);
> sodass ich nachher in meiner "calculate" Methode "convert" ganz
> einfach aufrufen kann
>
> double CalcClass::calculate(double p_val1, double p_val2)
> {
> return convert(p_val1 * p_val2);
> }
>
>
> Leider funktioniert diese Methode nicht, da ich im Konstruktor einem
> Funktionspointer eine Lambda Funktion zuweise.
>
> Was muss ich anders machen, damit das klappt?
Wie oben gezeigt: Die Definition von convert ändern.
Besten Gruss aus Bremen,
Daniel Krügler