(ΠΡΡΠ°ΡΠΈ Π³ΠΎΠ²ΠΎΡΡ: ΠΌΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ operator&&, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΡΠΆΠ΅ Π½Π΅ ΠΊΠΎΠ½ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, Π° ΡΠ΅ΠΌ-ΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌ.)
Π£ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π»ΡΠ΄Π΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π° ΠΈΠ΄Π΅Ρ ΠΊΡΡΠ³ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ ΠΎ Π½Π΅ΡΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ , Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½ΠΈΡΠ΅Π³ΠΎ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π² Π½ΠΈΡ Π½Π΅Ρ. ΠΠ΅ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ, Π½ΠΎ Π½Π°Π»Π°Π³Π°Π΅ΠΌΡΠ΅ ΠΈΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Ρ.
if(w.size() > 10 && w != someNastyWidget)...
ΠΠ°Π»ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ , Π½Π°Π»Π°Π³Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ size, operator>, operator&& ΠΈΠ»ΠΈ operator!=, Π½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π»ΠΎΠΌ Π»Π΅Π³ΠΊΠΎ. Π£ΡΠ»ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ if Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π±ΡΠ»Π΅Π²ΡΠΊΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (w.size() > 10 && w!= someNastyWidget) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ bool. ΠΡΠΎ ΡΠ° ΡΠ°ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ doProcessing Π½Π°Π»Π°Π³Π°Π΅Ρ Π½Π° ΡΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° T. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ doProcessing Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΈΠΏΠ° T Π΄ΠΎΠΏΡΡΠΊΠ°Π» ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌ normalize, size ΠΈ swap.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°Π»Π°Π³Π°Π΅ΠΌΡΠ΅ Π½Π΅ΡΠ²Π½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°, ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ΅Π°Π»ΡΠ½Ρ, ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°Π»Π°Π³Π°Π΅ΠΌΡΠ΅ ΡΠ²Π½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ°: ΠΈ ΡΠ΅, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠ°ΡΠΈΠΌΠΈ ΡΠ²Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² (ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ), ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π²Ρ Π½Π΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π½Π΅ΡΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ (ΠΎΠΏΡΡΡ ΠΆΠ΅, ΠΊΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ).
Π§ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡβ’ Π ΠΊΠ»Π°ΡΡΡ, ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ.
β’ ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ²Π½ΠΎ ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β ΡΠ΅ΡΠ΅Π· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
β’ ΠΠ»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π΅ΡΠ²Π½Ρ ΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ . ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ 42: Π£ΡΠ²ΠΎΠΉΡΠ΅ ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° typename
ΠΠΎΠΏΡΠΎΡ: ΠΊΠ°ΠΊΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Β«classΒ» ΠΈ Β«typenameΒ» Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°:
template <class T> class Widget; // ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ βclassβ
template <typename T> class Widget; // ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ βtypenameβ
ΠΡΠ²Π΅Ρ: Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ. ΠΠΎΠ³Π΄Π° Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ°, class ΠΈ type-name ΠΎΠ·Π½Π°ΡΠ°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΈΡΠ°ΡΡ class, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ ΠΊΠΎΡΠΎΡΠ΅. ΠΡΡΠ³ΠΈΠ΅ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠ΅Π½Ρ) ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ typename, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ typename, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ, ΠΈ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΡΡ ΡΠ»ΠΎΠ²ΠΎ class Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ C++, class ΠΈ typename Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° ΠΎΠ·Π½Π°ΡΠ°ΡΡ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π² C++ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° class ΠΈ typename ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ. ΠΠ½ΠΎΠ³Π΄Π° Π²Ρ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ typename. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ β ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π΄Π²ΡΡ ΡΠΈΠΏΠ°Ρ ΠΈΠΌΠ΅Π½, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ STL-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π°ΠΌ ΡΠΈΠΏΠ° int. ΠΠ°Π»Π΅Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎ-Π΄ΡΡΠ°ΡΠΊΠΈ. ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΠΎΠ½Π° Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ, Π½ΠΎ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ Π½Π° Π²ΡΠ΅ΠΌΡ β Π²ΡΠ΅ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ Π³Π»ΡΠΏΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ:
template <typename C> // ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΎΡΠΎΠΉ
void print2nd(const C& container) // ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
{ // ΡΡΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ C++!
if (container.size() >= 2) {
C::const_iterator iter(container.begin()); // ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ,
// ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ
// ΡΠ»Π΅ΠΌΠ΅Π½Ρ
++iter; // ΡΠΌΠ΅ΡΡΠΈΡΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ
// ΡΠ»Π΅ΠΌΠ΅Π½Ρ
int value = *iter; // ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² int
std::cout << value; // Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ int
}
}
Π― Π²ΡΠ΄Π΅Π»ΠΈΠ» Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ β iter ΠΈ value. Π’ΠΈΠΏΠΎΠΌ iter ΡΠ²Π»ΡΠ΅ΡΡΡ C::const_iterator β ΠΎΠ½ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° C. ΠΠΌΠ΅Π½Π° Π² ΡΠ°Π±Π»ΠΎΠ½Π΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π°, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° Ρ Π±ΡΠ΄Ρ Π½Π°Π·ΡΠ²Π°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. C::const_iterator β ΡΡΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠΈΠΏΠ°, ΡΠΎ Π΅ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ.
ΠΡΡΠ³Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² print2nd β value β ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int, Π° int β ΡΡΠΎ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ Π½ΠΈ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π°. Π’Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ.
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΠΉ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ print2nd Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠΏΠΎ, Π½Π°ΠΏΠΈΡΠ°Π² Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
template <typename C> // ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
void print2nd(const C& container) // ΡΡΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ C++!
{
C::const_iterator *x;
...
}
ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ x ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° C::const_iterator. ΠΠΎ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Β«Π·Π½Π°Π΅ΠΌΒ», ΡΡΠΎ C::const_iterator ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ. Π ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ C Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»Π΅Π½ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ const_iterator ΠΈ ΡΡΠΎ, Π΅ΡΠ»ΠΈ x Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ? Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ C::const_iterator Π½Π° x! ΠΠ²ΡΡΠΈΡ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π°Π²ΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° C++ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΡΡΠΌΠ°ΡΡΠ΅Π΄ΡΠΈΡ .
ΠΠΎΠΊΠ° ΠΎ C Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ·Π½Π°ΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ C::const_iterator ΡΠΈΠΏΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Π±ΠΎΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° print2nd ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎ C Π½Π΅ Π·Π½Π°Π΅Ρ. Π C++ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠ΅Π΅ ΡΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ: Π΅ΡΠ»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅, ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΈΠΌΡ ΡΠΈΠΏΠ°, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ²Π½ΠΎ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΡΡΡΡ Π½ΠΈΠΆΠ΅.
ΠΠΌΠ΅Ρ ΡΡΠΎ Π² Π²ΠΈΠ΄Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΡΡΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ print2nd:
template <typename C>
void print2nd(const C& container)
{
if (container.size() >= 2) {
C::const_iterator iter(container.begin()); // ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ
... // ΡΡΠΎ Π½Π΅ ΠΈΠΌΡ ΡΠΈΠΏΠ°
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ C++. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ iter ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ C::const_iterator ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ, Π½ΠΎ ΠΌΡ Π½Π΅ ΡΠΎΠΎΠ±ΡΠΈΠ»ΠΈ C++ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ C++ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ C++, ΡΡΠΎ C::const_iterator β ΡΡΠΎ ΡΠΈΠΏ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ typename Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ:
template <typename C> // ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π‘++
void print2nd(const C& container)
{
if (container.size() >= 2) {
typename C::const_iterator iter(container.begin());
...
}
}
ΠΠ±ΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ: Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΠ΅ΡΡ ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ»ΠΎΠ²ΠΎΠΌ typename (ΡΠΊΠΎΡΠΎ Ρ ΠΎΠΏΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅).
Π‘Π»ΠΎΠ²ΠΎ typename ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΈΠΌΠ΅Π½ ΡΠΈΠΏΠΎΠ²; Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΎΠ½ΠΎ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
template <typename C> // Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ typename (ΠΊΠ°ΠΊ ΠΈ βclassβ)
void f(const C& container, // typename Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ
typename C::iterator iter); // typename ΡΡΠ΅Π±ΡΠ΅ΡΡΡ
C Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠΈΠΏΠ° (ΠΎΠ½ΠΎ Π½Π΅ Π²Π»ΠΎΠΆΠ΅Π½ΠΎ Π²Π½ΡΡΡΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π°), ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΡΡΡ ΡΠ»ΠΎΠ²ΠΎΠΌ typename ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π½ΠΎ C::iterator β ΡΡΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠΈΠΏΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ typename.
ΠΠ· ΠΏΡΠ°Π²ΠΈΠ»Π° Β«typename Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠΈΠΏΠΎΠ²Β» Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: typename Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠΈΠΏΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π΅Π½ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
template <typename T>
class Derived: public Base<T>::Nested { // ΡΠΏΠΈΡΠΎΠΊ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²:
public: // typename Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ
explicit Derived(int x)
:Base<T>::Nested(x) // ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
{ // Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π΅Π½ΠΎΠ²:
// typename Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ
typename Base<T>::Nested temp; // ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ
... // Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΈΠΏΠ° Π½Π΅ ΠΊΠ°ΠΊ
} // ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ
... // ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
}; // ΡΠ»Π΅Π½ΠΎΠ²: typename Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
Π’Π°ΠΊΠ°Ρ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ, Π½ΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΡΠ° Π²Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅ΡΠ΅ Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ.