Lambdas VC10 Beta 2

23/10/2009 - 23:23 von Nicolas Pavlidis | Report spam
Hi!

Folgendes hab ich ausprobiert, von dem ich initial gedacht hàtte dass es
funktionieren sollte (zu gegeben mit Wissen dass von C# kommt):

typedef int(*TheFunc)(int);

int doSomething(int startArg, int howLong, TheFunc callOnArgEveryTime)
{
int result = startArg;
while(howlong >0)
{
result += callOnArgEveryTime(resukt);
}
return(result);
}

int main()
{
auto foo = []{int arg}
{
return(arg += 2);
}

int result = doSomething(42, 5, foo); // *
cout << result << endl;
}

In Zeile * meint er, dass er keine Konvertierung des gegebenen Labdas in
den Typ TheFunc finden kann.

Auch ein &foo in gegebener Zeile hat nichts geracht, hàtte mich auch
gewundert.

Ich mein aus TheFunc ein template argument an doSomething zu machen
würde gehen, ist aber ein bissi fad IMHO, auch wenn ich templates mag :-).

Auf welcher Basis ist eigentlich die Featureselektion gefallen auf
dessen Basis Features aus C++0x ausgesucht wurden für VC10? Die
Initializer - Litsts und entsptsprechendes rage bases for wàren schön
gewesen, weil sehr praktisch :-).

Vielleicht weiß ja wer die Lösung zu obrigem Problem, was ich mir
forstellen könnt wàre schlicht und ergreifend, dass der für das Lambda
generierte Type nicht in den function - pointer typ wandel bar ist,
würde auch die Fehlermeldung erklàren, ist aber nur Mutmaßung :-).

Danke && LG
Nicolas
| Nicolas Pavlidis | Elvis Presly: |
| Student of SE & KM | "Into the goto" |
| http://pavnics-thoughts.blogspot.com |
| University of Technology, Graz|
 

Lesen sie die antworten

#1 Jochen Kalmbach [MVP]
24/10/2009 - 08:49 | Warnen spam
Hallo Nicolas!

Folgendes hab ich ausprobiert, von dem ich initial gedacht hàtte dass es
funktionieren sollte (zu gegeben mit Wissen dass von C# kommt):

{snip}



Das Beispiel làsst sich so nicht übersetzen... da hat es ein paar Fehler
drin...

In Zeile * meint er, dass er keine Konvertierung des gegebenen Labdas in
den Typ TheFunc finden kann.



Ja, das stimmt allerdings... ich hab es auch nicht hinbekommen... wenn
DU willst kann ich mal weiter nachforschen...


Ich mein aus TheFunc ein template argument an doSomething zu machen
würde gehen, ist aber ein bissi fad IMHO, auch wenn ich templates mag :-).



So geht es:
template<class _Fn0>
int doSomething(int startArg, int howLong, _Fn0 callOnArgEveryTime)
{
int result = startArg;
while(howLong >0)
{
result += callOnArgEveryTime(result);
}
return(result);
}

int main()
{
//std::tr1::function<int (int)> foo = [](int arg)->int // so geht es
auch)
auto foo = [](int arg)
{
return(arg += 2);
};

int result = doSomething(42, 5, foo);
std::cout << result << std::endl;
}

Auf welcher Basis ist eigentlich die Featureselektion gefallen auf
dessen Basis Features aus C++0x ausgesucht wurden für VC10? Die
Initializer - Litsts und entsptsprechendes rage bases for wàren schön
gewesen, weil sehr praktisch :-).



Keine AHnung... da musst Du mal im vcblog lesen da wird öfters mal
was erwàhnt...

Vielleicht weiß ja wer die Lösung zu obrigem Problem, was ich mir
forstellen könnt wàre schlicht und ergreifend, dass der für das Lambda
generierte Type nicht in den function - pointer typ wandel bar ist,



Das könnte ich mal nachfragen...

Greetings
Jochen

My blog about Win32 and .NET
http://blog.kalmbachnet.de/

Ähnliche fragen