Jak se na funktor volß... II.

ZdrojovΘ k≤dy p°φklad∙

ZdrojovΘ k≤dy jsou napsßny v C++, striktn∞ podle standardu, a proto by m∞ly chodit vÜude. N∞kterΘ p°ekladaΦe vÜak doposud neakceptujφ vÜechny konstrukce, kterΘ se ve zdrojovΘm k≤du mohou objevit, proto bylo provedeno otestovßnφ v nejb∞₧n∞jÜφch p°ekladaΦφch: Borland C++ Builder verze 5.0 (service pack 1) a Microsoft Visual C++ .NET verze 7.0 (beta2) [°azeno podle abecedy]. V²sledek testu je patrn² z tabulky.

 

jmΘno souboru

popis

BCB5

MVC7

f11_typ_funkce

zφskßnφ typu funkce pomocφ operßtoru typeid

OK

OK

f12_stl_operator

STL funktory implementujφcφ operßtory (vΦetn∞ ukßzky pou₧itφ binder∙)

OK

OK

f13_bitove_operatory

pφÜeme vlastnφ funktory û bitovΘ operßtory, analogie STL funktor∙ logick²ch operßtor∙

OK

!!!

f13_bitove_operatory_mvc7

pφÜeme vlastnφ funktory û bitovΘ operßtory, analogie STL funktor∙ logick²ch operßtor∙, specißlnφ verze p°edchozφho souboru pro MVC7

OK

OK

f14_stl_ptr_fun

STL adaptery pointer_to_unary_function a pointer_to_binary_function a jejich vytvo°ujφcφ funkce ptr_fun

OK

OK

f15_stl_mem_fun

STL adaptΘry pro ΦlenskΘ funkce objektov²ch typ∙ a jejich vytvo°ujφcφ funkce

OK

OK

f16_stl_binder

STL bindery a jejich vytvo°ujφcφ funkce bind1st a bind2nd

OK

OK

f17_stl_negator

STL negßtory a jejich vytvo°ujφcφ funkce not1 a not2

OK

OK

f18_komplexni_priklad

komplexn∞jÜφ p°φklad na vÜechny druhy STL adaptΘr∙, °eÜenφ ·kolu z Φlßnku

OK

OK

f19_piseme_funktor

pφÜeme vlastnφ funktory: poΦφtßnφ (mocnin) odchylek od zadanΘ hodnoty, v²poΦet aritmetickΘho pr∙m∞ru bez napsßnφ smyΦky

OK

OK

f20_skladani_funkci

pφÜeme vlastnφ adaptΘr: slo₧enφ dvou klasick²ch unßrnφch funkcφ

OK

OK

f21_skladani_obecne

pφÜeme vlastnφ adaptΘr: sklßdßnφ funkcφ, obecnß verze (nejv²Üe binßrnφ funkce)

Pozor: urΦeno pro pokroΦilejÜφ û vy₧aduje hlubÜφ znalosti Üablon

OK

OK

f22_podraz_citac

ukßzka n∞kter²ch problΘmov²ch situacφ û ΦφtaΦ (bli₧Üφ popis viz Φlßnek)

OK

OK

f23_podraz_poradi

ukßzka n∞kter²ch problΘmov²ch situacφ û u funkce transform nenφ garantovßno po°adφ û nep°enositeln² k≤d

OK

OK

f24_pekny_podraz

ukßzka n∞kter²ch problΘmov²ch situacφ û äp∞kn² podrazô (viz Φlßnek v Φasopisu)

OK

OK

 

OK znamenß, ₧e program Üel p°elo₧it a ·sp∞Ün∞ spustit (u zßv∞reΦn²ch program∙ û äpodraz∙ô neznamenß, ₧e bychom se jim vyhnuli...).

!!! znamenß, ₧e program neÜel ani p°elo₧it. Pokud vßs zajφmß, proΦ soubor f13_bitove_operatory neÜel p°elo₧it v Microsoft Visual C++ .NET 7.0, zde je vysv∞tlenφ:

Tento p°ekladaΦ si moc nerozumφ s ΦßsteΦn²mi specializacemi Üablon t°φd. Z tohoto d∙vodu jsou n∞kterΘ (malΘ) Φßsti standardnφ knihovny implementovßny trochu jinak (nestandardn∞) nebo v∙bec. To se p°ihodilo i ÜablonovΘ t°φd∞ iterator_traits. Standard p°edepisuje ΦßsteΦnou specializaci tΘto t°φdy pro klasickΘ ukazatele (klasick² ukazatel je takΘ iterßtor). V implementaci STL od Microsoftu tato ΦßsteΦnß specializace chybφ. To se projevφ p°i pou₧itφ zp∞tn²ch iterßtoru, ÜablonovΘ t°φdy reverse_iterator. Kdy₧ toti₧ napφÜeme

 

int pole[N] = { /* ... */ };

reverse_iterator<int *> ri(pole + N);

 

tak t°φda reverse_iterator<int *> se äzeptßö na urΦitΘ definice typ∙ svΘho ÜablonovΘho argumentu (int *) prost°ednictvφm t°φdy iterator_traits. No a kde nic nenφ, ani Φert nebere... :-)

 

Pokud mßte s n∞kter²mi p°φklady problΘmy, nebo se chcete na n∞co zeptat, p°φpadn∞ n∞co zkritizovat, obra¥te se na autora na adreseá cpp.stl@post.cz

 

Jaroslav Fran∞k