Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lambdas VC10 Beta 2

0 views
Skip to first unread message

Nicolas Pavlidis

unread,
Oct 23, 2009, 5:23:05 PM10/23/09
to
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------------|

Jochen Kalmbach [MVP]

unread,
Oct 24, 2009, 2:49:57 AM10/24/09
to
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/

Nicolas Pavlidis

unread,
Oct 24, 2009, 5:22:32 AM10/24/09
to
Hi!

Jochen Kalmbach [MVP] wrote:
> 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...

Ich weis, sollte sinngem�� wiedergeben was ich versucht habe.
Wollte den Lesern die Includes und usings ersparen.

BTW: Super Sache die neuen Features f�rt INelisense in VS 2010 f�r C++ :-).

>> 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...

Mich w�rd nur interessieren warum snet geht, aber wie gesgat ich gehe
mal davon aus dass man wirklich nicht von std::tr1::function nach
Functionpointer mit gleicher signatur kommt.


>
>> 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)

Ich wei�m das war besagtes fad in meinem original postig :-).

>> 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...

Ok.

>> 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...

Das w�r super, deine Wege sidn da vielleicht k�rzer :-).

Jochen Kalmbach [MVP]

unread,
Oct 24, 2009, 1:37:03 PM10/24/09
to
Hallo Nicolas!

>> Das k�nnte ich mal nachfragen...
>
> Das w�r super, deine Wege sidn da vielleicht k�rzer :-).

Hab zwar noch keine "offizielle" Antwort, aber zumindest sind die
anderen MVPs sich einig, dass die "function"-Klasse (die
dahinter-steckt) sich vermutlich nicht auf "old-style c functions"
casten lassen... die lambdas k�nnen ja auch noch verweise auf lokale
Variablen haben, deshalb ist das Konzept dahinter was ganz anderes....

Also, es geht vermutlich nicht... aber ich melde mich nochmals, falls
ich was anderes h�re... oder sich jemand offizell meldet... (aber es ist
ja Wochenende, da hat auch MS zu... ;)
(ausser Holger hat gerade seinen Rechner an ;) )

Nicolas Pavlidis

unread,
Oct 25, 2009, 4:47:33 AM10/25/09
to
Hi!

Jochen Kalmbach [MVP] wrote:
>>> Das k�nnte ich mal nachfragen...
>>
>> Das w�r super, deine Wege sidn da vielleicht k�rzer :-).
>
> Hab zwar noch keine "offizielle" Antwort, aber zumindest sind die
> anderen MVPs sich einig, dass die "function"-Klasse (die
> dahinter-steckt) sich vermutlich nicht auf "old-style c functions"
> casten lassen... die lambdas k�nnen ja auch noch verweise auf lokale
> Variablen haben, deshalb ist das Konzept dahinter was ganz anderes....

Sowas in der Richtung habe ich eh schon bef�rchtet.
Klingt auf den ersten Blick auch logisch, dass das eher koppliziert ist,
das auf eine Funktion bzw. Functionpointer zu casten.

Wobei man das u.U auch differenzierter sehen k�nnte, da die Variante []
i.A schon auf einen Functionpointer mit entsprechender Signatur castbar
w�re, problematisch wirds ja nur wenn wirklich was in den [] drinnen steht

Aber genug klug ges..prochen :-).
Was sagt da eigentlich der C++ Standrad Draft zu 0x dazu?

> Also, es geht vermutlich nicht... aber ich melde mich nochmals, falls
> ich was anderes h�re... oder sich jemand offizell meldet... (aber es ist
> ja Wochenende, da hat auch MS zu... ;)
> (ausser Holger hat gerade seinen Rechner an ;) )

Danke f�r die M�he.

LG && Sch�nen Sonntag noch

0 new messages