C++, ukazatel na statickou funkci

Re: C++, ukazatel na statickou funkci
« Odpověď #15 kdy: 07. 04. 2011, 11:59:58 »
No tak přecijenom je to konstrukce trochu delší, musíš definovat anonymní funkci, takže nepřehlednější, atd...

ve foreach už můžeš rvát lambda funkci. Proto mi tohle přijde opradu zbytečné.


Sten

Re: C++, ukazatel na statickou funkci
« Odpověď #16 kdy: 07. 04. 2011, 12:59:30 »
Ja vyhody chapu, jen mi to prijde takove nesystemove :-) Ono by se dalo neco podobnyho udelat makrem, ze jo...

Kód: [Vybrat]
#define foreach(it, cont) for((it) = (cont).begin(); (it) != (cont).end(); (it)++)

Samozrejme takhle nejde (nebo me alespon nenapada jak) deklarovat iterator primo ve foru, nebude to fungovat na klasicky pole atd... no nic, proste se s novou variantou foru smirim a bude to :-)

Doporučuji Boost.Foreach, dá se upravit a z něj také nový for vyšel :-)

Logik

  • *****
  • 993
    • Zobrazit profil
    • E-mail
Re: C++, ukazatel na statickou funkci
« Odpověď #17 kdy: 08. 04. 2011, 00:06:07 »
Ondra: lambda funkcí ale nevyřešíš for cyklus, kterej má závislý kroky. Respektive vyřešíš pomocí proměných z closure, ale to už nepřehledné je (ty stavové proměnné definuješ někde jinde, než je používáš).
Jinak myslím, že by to šlo udělat i makrem (definovat iterátor pomocí něco::iterator_type). Ale pokud se todle používá dnes a denně, tak považuji za přínos, když se pro to udělá jednotná norma a syntaktickej cukr, než aby to každej řešil plus mínus stejně, ale jinak.

Re: C++, ukazatel na statickou funkci
« Odpověď #18 kdy: 08. 04. 2011, 07:32:59 »
No ja to nevyuziju, protoze mam kontejnery navrzene trochu jinak, vic javovsky

Kód: [Vybrat]
for (auto i = pole.getFwIter();i.hasItems();) {
   auto x = i.getNext();
   ...
}

V Jave se to pouziva spis ve while cyklu. Podstatnou vyhodou tohodle stylu je, ze kiteraci mi staci jen jeden objekt (neni treba vytahovat dva nebo nekdy dokonce tri!). Iterator se chova jako stream a tak neni rozdil, zda ten kdo data cte je vytahuje z kontejneru, nebo jsou za behu generovany. Takove "pythonovske" generatory jsou v tom naprosto super.