 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Andreas Tscharner Guest
|
Posted: Wed May 02, 2012 12:28 pm Post subject: Lambda Funktion einem Funktionspointer einer Klasse zuweisen |
|
|
Hallo Welt,
Ich habe z.B. folgende Klasse
class CalcClass
{
private:
double (CalcClass::*convert)(double);
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; };
}
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?
Besten Dank und Gruss
Andreas |
|
| Back to top |
|
 |
Daniel Krügler Guest
|
Posted: Wed May 02, 2012 6:04 pm Post subject: Re: Lambda Funktion einem Funktionspointer einer Klasse zuwe |
|
|
Am Mittwoch, 2. Mai 2012 14:28:52 UTC+2 schrieb Andreas Tscharner:
| Quote: | 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.
| Quote: | 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);
| Quote: | 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 |
|
| Back to top |
|
 |
Guest
|
Posted: Thu May 03, 2012 1:49 pm Post subject: Re: Lambda Funktion einem Funktionspointer einer Klasse zuwe |
|
|
On Wednesday, May 2, 2012 8:04:51 PM UTC+2, Daniel Krügler wrote:
[snip]
| Quote: | Was muss ich anders machen, damit das klappt?
Wie oben gezeigt: Die Definition von convert ändern.
|
Vielen Dank! Funktioniert nun einwandfrei...
Gruss
Andreas |
|
| Back to top |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|