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 |
zφskßnφ typu funkce pomocφ operßtoru typeid |
OK |
OK |
|
STL funktory implementujφcφ operßtory (vΦetn∞ ukßzky
pou₧itφ binder∙) |
OK |
OK |
|
pφÜeme vlastnφ funktory û bitovΘ operßtory, analogie STL
funktor∙ logick²ch operßtor∙ |
OK |
!!! |
|
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 |
|
STL adaptery pointer_to_unary_function a pointer_to_binary_function a
jejich vytvo°ujφcφ funkce ptr_fun |
OK |
OK |
|
STL adaptΘry pro ΦlenskΘ funkce objektov²ch typ∙ a jejich
vytvo°ujφcφ funkce |
OK |
OK |
|
STL bindery a jejich vytvo°ujφcφ funkce bind1st a bind2nd |
OK |
OK |
|
STL negßtory a jejich vytvo°ujφcφ funkce not1 a not2 |
OK |
OK |
|
komplexn∞jÜφ p°φklad na vÜechny druhy STL adaptΘr∙, °eÜenφ
·kolu z Φlßnku |
OK |
OK |
|
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 |
|
pφÜeme vlastnφ adaptΘr: slo₧enφ dvou klasick²ch unßrnφch funkcφ |
OK |
OK |
|
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 |
|
ukßzka n∞kter²ch problΘmov²ch situacφ û ΦφtaΦ (bli₧Üφ
popis viz Φlßnek) |
OK |
OK |
|
ukßzka n∞kter²ch problΘmov²ch situacφ û u funkce transform nenφ
garantovßno po°adφ û nep°enositeln² k≤d |
OK |
OK |
|
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