C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Lambda Funktion einem Funktionspointer einer Klasse zuweisen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Tscharner
Guest





PostPosted: Wed May 02, 2012 12:28 pm    Post subject: Lambda Funktion einem Funktionspointer einer Klasse zuweisen Reply with quote



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





PostPosted: Wed May 02, 2012 6:04 pm    Post subject: Re: Lambda Funktion einem Funktionspointer einer Klasse zuwe Reply with quote



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






PostPosted: Thu May 03, 2012 1:49 pm    Post subject: Re: Lambda Funktion einem Funktionspointer einer Klasse zuwe Reply with quote



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
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
 


Powered by phpBB © 2001, 2006 phpBB Group