рд╕реА ++ рдПрдХ рднреНрд░рд╛рдордХ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдмрдбрд╝реА рдЦрд╛рдореА рдХреЛрдб рдХреЗ рдкреГрдердХ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреА рдХрдард┐рдирд╛рдИ рд╣реИред рдПрдХ рдареЗрда рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдпрд╣ рд╕рдм рдХреБрдЫ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд▓реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрддреНрдпрдзрд┐рдХ-рдЕрдЫреВрддрд╛ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдиреНрдпреВрдирддрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдорд╛рдирдХ рд╡рд╛рд▓реЗ рд╕рд╣рд┐рдд), рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рдЯреБрдХрдбрд╝реЗ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рди рдХреЗрд╡рд▓ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдмрд▓реНрдХрд┐ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рднреА рд░реБрдЪрд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд╣реА рдХрд┐рдлрд╛рдпрддреА рд╣реИред
рдЕрд╕реНрд╡реАрдХрд░рдг : рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдЖрджрд░реНрд╢ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдП рд╣реИрдВред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рдирд╣реАрдВ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд▓реЛрдЧ рд╣реИрдВ), рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬреНрдЮрд╛рдд рд╣реИрдВ - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдЬреЛ рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдкрд░ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЕрд╕реНрд╡реАрдХрд░рдг рдПрди 2 : рдореИрдВ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡реНрдпрдХреНрдд рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдореБрдЭрд╕реЗ рднреА рдмрджрддрд░ рд╕рдордЭрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдбрд╛рдВрдЯрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╣реАрдВ рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХреА рд╣реИ, рдФрд░ рдпрд╣ рдкрд╛рда рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореБрдЭрд╕реЗ рдмреЗрд╣рддрд░ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдореВрд▓реНрдпрд╡рд╛рди рдЕрдиреБрднрд╡ рд╣рд╛рд╕рд┐рд▓ рдХрд░реВрдВрдЧрд╛ред рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рджред
рдЕрд╕реНрд╡реАрдХрд░рдг рдПрди 3 : рдореИрдВрдиреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдмрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦреЗред рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИ рдФрд░, рд╢рд╛рдпрдж, рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЛ рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛ред рдФрд░ рд▓реЗрдЦ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд╕рдорд╛рди рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдореБрджреНрджреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрд╕реНрд╡реАрдХрд░рдг рдПрди 4 (
рдЕрдкрдбреЗрдЯред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░): рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдлрд╛рдЙрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ
рдордЬрдмреВрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрдХрд░рдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд╛рдЙрд▓рд░ рдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рд╕рд╣рд┐рдд, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ - рдЯрд╛рдЗрдкреЗрдбрд╕реЗрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЖрд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╛рдЙрд▓рд░ рдиреЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛, рдЬреЛ рдорд╣рдВрдЧрд╛ рд╣реИ - рдореЗрд░рд╛ рд╢реВрдиреНрдп-рд▓рд╛рдЧрдд рдЯреВрд▓, рд╢реВрдиреНрдп рд▓рд╛рдЧрдд (рдпрджрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ, рддреЛ 2M * рд▓реЙрдЧ (рдПрди) рдХреЗ рдмрдЬрд╛рдп рд▓реЙрдЧ (рдПрди), рдЬрд╣рд╛рдВ рдПрдо рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ)ред C ++ 20 рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯреИрдХреНрд╕ рдЯрд╛рдЗрдкрд┐рдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж, рдореВрд▓реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рдХреЗ рдЕрд░реНрде рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдореЗрдВ рди рдмрдврд╝рд╛рдПрдВред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ
рдХреЗ рд╕рд╕реНрддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ
рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ
рд╡рд┐рдзрд┐ рдорд┐рд▓реЗрдЧреАред
рдЙрджрд╛рд╣рд░рдг C ++ рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рдлреА рд▓рд╛рдЧреВ рд╣реИрдВред рд╢рд╛рдпрдж, рд╕рдордп рдХреЗ рд╕рд╛рде, рдореИрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрд┐рдВрдЧ рдХреЛрдб рджреВрдВрдЧрд╛ рдЕрдЧрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЖрдкрд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛрдЧрд╛ред
рднрд╛рдЧ 1. рдПрдХ рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рд╕рднреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рд╢рд╛рдирджрд╛рд░ рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд▓рдХреНрд╖реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╣рдо рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗ - рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдиреНрдпреВрдирддрдо рд╕рд┐рджреНрдзрд╛рдВрддред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЬрд╛рджреВ рд╕рд┐рд░реНрдл рджреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИрдВ, рдФрд░ рдЬреЛ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╣реИред рдкрд╣рд▓рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдгрд╢реАрд▓рддрд╛ рдЕрд░рд╛рдбрдиреЗ рдХреЗ рдзрд╛рдЧреЗ рдХреА рддрд░рд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП, рддреЛ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреНрдпрд╛ рд╣реЛрдЧрд╛ - рдФрд░ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдХрд╛рдлреА рдЕрдзрд┐рдХред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА, рдХрдо рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рдмрдирд╛рддреЗ рд╣реИрдВред
рдФрд░ рдореЗрд░рд╛ рдорддрд▓рдм рдЯреАрдбреАрдбреА рдирд╣реАрдВ рд╣реИред рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреАрдорд╛рд░реА рд╣реИ, рдЙрдирдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд╣реАрдВ рдкрдврд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рдзрд╛рд░реНрдорд┐рдХ рдкреВрдЬрд╛ред TDD рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд╛рдЧ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдордЭ рд╣реИ рдХрд┐ рдЕрдЪреНрдЫреЗ рдХреЛрдбрд┐рдВрдЧ рдЕрднреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдпрд╣ рди рдХреЗрд╡рд▓ рдХреБрдЫ рдХреЛрдб рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рднреАред рдпрджрд┐ рдЖрдкрдХреЗ рд╡рд░рд┐рд╖реНрда рдЕрдзрд┐рдХрд╛рд░реА рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЖрд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдЕрднреА рднреА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрддреНрдо-рд╕рдВрд░рдХреНрд╖рдг рдХреА рднрд╛рд╡рдирд╛ рд╣реИред
рджреВрд╕рд░рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдкреНрд░рддрд┐рд░реВрдкрддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ / рд╣рд╛рд░реНрдбрдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдЕрддреНрдпрдзрд┐рдХ рдЕрдЫреВрддрд╛ рдореЙрдбреНрдпреВрд▓рд░рддрд╛ рдЬреЛ рд╕реНрд╡рдпрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЕрдм рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдореЛрдиреЛрд▓рд┐рде рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдлреИрд╢рдиреЗрдмрд▓ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рднрдпрд╛рдирдХ рд░рд╣рд╕реНрдп рдмрддрд╛рдКрдВрдЧрд╛ - рдореЛрдиреЛрд▓рд┐рде рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛ рдХреА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдиреНрдпреВрдирддрдо рдЬреБрдбрд╝реЗ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдКрдВрдЧрд╛: рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рднреА рдПрдХ рдмрдврд╝рд╛рд╡рд╛ рд╕реЗ share_ptr рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдпрджрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдк рди рдХреЗрд╡рд▓ рдкреВрд░реЗ рдмреВрд╕реНрдЯ, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреЗ рдЖрдзреЗ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡реНрдпрд╕рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдиреЗ рддреАрди рд╕реЗ рдкрд╛рдВрдЪ рджрд┐рдиреЛрдВ рдХреА рд╣рддреНрдпрд╛ рдХреА !!! рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЖрдк рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ share_ptr рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ !!!
рдФрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╕реЗ рднреА рдмрджрддрд░ рд╣реИ - рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдЕрдкрд░рд╛рдз рд╣реИред
рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕рд╛рдЭрд╛ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рджрд░реНрдж рд░рд╣рд┐рдд рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рд╕рдм рдХреБрдЫ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде share_ptr рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдгред рдпрд╛ рдмрдврд╝рд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдУред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ xml / html рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рдРрд╕реЗ рдЖрджрд░реНрд╢ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрддреНрдкрд╛рджрди / рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрдВрдкрдиреА рдХреА рдЬрд░реВрд░рддреЛрдВ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЖрджрд░реНрд╢ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ std :: istream, std :: file_system, std :: string рдФрд░ stringcode рдХреЗ рд╕рд╛рде рд╣рд╛рд░реНрдбрдХреЛрдб рд╕рд░реНрдЪ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдкрд╛рд░реНрд╕рд░ рдореЗрдВред рд╣рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╢рд╛рдпрдж рдЙрдк-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдк-рдХреЗрдВрджреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЕрднреА рднреА рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдПрдХ рдЖрд╡рдВрдЯрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдирддреАрдЬрддрди, рд╣рдо рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЯреЗрд╕реНрдЯ рдмреНрд▓реИрдВрдХ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ / рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ / рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдмрдврд╝реЗрдЧреА - рдХрд▓, рдзрд╛рд░рд╛ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд╣рдд рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╣реАрдВ рдПрдХ рд╕рд╛рдЗрдЯ, рдФрд░ рдХреЛрдИ рднреА рдЗрд╕реЗ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдк рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реА ++ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдиреНрдпреВрдирддрдо рд╣реЛрдВрдЧреЗред рдПрдХ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдореВрд▓реНрдп рд╕рд╡рд╛рд▓ рдкреВрд░реА рд╡реГрджреНрдзрд┐ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рддрддреНрд╡реЛрдВ рд╕рд╣рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╣рдВрдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрдЯреНрдЯрд░рдкрдВрдереА рдореЙрдбреНрдпреВрд▓-рдП-рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реА ++ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓рд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рд╡реНрдпрдерд╛ рд╕реНрдкреЙрдЯ рд╣реИред рдпрджрд┐ рдЖрдк рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ cpp-files рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ / рдЕрд▓рдЧрд╛рд╡ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░, рд░рд┐рд╢реНрддреЗрджрд╛рд░, 100% рдирд╣реАрдВ, рддреЛ рд╣реЗрдбрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдареЛрд╕ рдореЛрдиреЛрд▓рд┐рде рдореЗрдВ рдмреБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдВрд╕ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдлрд╛рдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдПрдХ рднрдпрд╛рдирдХ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдпрд╣ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд▓реЗ рд╣реА рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреБрд▓ рд╡рд░реНрдЧреЛрдВ рдХреА рдЕрдХреНрд╖рдорддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, c ++ рдореЗрдВ рджреЛрдиреЛрдВ .cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд╣реЗрдбрд░ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рдХрдХреНрд╖рд╛рдУрдВ (рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛) рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрдЬрд╛рдп (рдпрд╛рдиреА рдЗрд╕реЗ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ) рдХреНрд▓рд╛рд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╕рднреА .cpp-shniks рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реЗрдбрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рд╡рд╣ .cpp-shnik рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред рдЕрднреА рднреА рдлрд╛рд╕реНрдЯрдкрд┐рдореНрдкрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рд╕реАрдкреАрдкреА рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред
рддреЛ, рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рд╣реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рд╣реЗрдбрд┐рдВрдЧ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕рдорд╛рд╡реЗрд╢рди рдХреЗ рд╕рд╛рдеред рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдмрд┐рдВрджреБ, рдмрд┐рдВрджреБ-рджрд░-рдмрд┐рдВрджреБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЪрд▓реЛ "рдореЙрдбреНрдпреВрд▓" рд╢рдмреНрдж рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдореЙрдбреНрдпреВрд▓ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдпреЛрдЧ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрдп, рдпрд╛ HTML рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред
"рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрдп" рдореЙрдбреНрдпреВрд▓ рдХрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдмрдВрдж рдХрд░реЗрдВ, рд╕реНрдерд┐рддрд┐, рдЧреБрдг рдкрдврд╝реЗрдВ, рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдкрдврд╝реЗрдВред рдЙрд╕реА рд╕рдордп, рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрдХреИрдирд░ рдХреЛ "рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрдп" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, "рдлрд╛рдЗрд▓" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрдХреИрдирд░ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдЖрдпреЛрдЬрди рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИред
- рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ред рдЗрдореНрдкреАрд░реЗрдЯрд┐рд╡ "рдореЙрдбреНрдпреВрд▓-рдПрдЬрд╝-рдорд┐рдХреНрд░реЛрд╕ рд╕рд░реНрд╡рд┐рд╕"ред
- 20% рдХреЛрдб рдХрд╛ рдЖрд╡рдВрдЯрди рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдордп рдХрд╛ 80% рдирд┐рд╖реНрдкрд╛рджрд┐рдд - рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдореВрд▓
- рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдпрд╣ рд╣рд╛рд░реНрдбрдХреЛрдб рдХреА рдХрдореА рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдЙрд╕ рд╣рд╛рд░реНрдбрдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЕрдиреНрдп рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЙрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреВрд░рд╛ рдЕрд▓рдЧрд╛рд╡ред "рдиреМрдХрд╛рдпрди" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдЬреЛ рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдорд╛рдирдХ рд╡рд╛рд▓реЗ рд╕рд╣рд┐рдд) рдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ / рдПрдбреЗрдкреНрдЯрд░ / рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░рдирд╛
- рдПрдХ рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рдпрд╛ рдлрд╛рд╕реНрдЯрдкрд┐рдореНрдкрд▓ рдмрдирд╛рдирд╛ рдХреЗрд╡рд▓ рддрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛред
рдмреЗрд╢рдХ, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдХрдо рдХреАрдордд рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмреЛрдирд╕ рд╣реЛрдЧрд╛ - рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╢рд╛рдпрдж, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ (jni) рд╡рд╛рддрд╛рд╡рд░рдг, JNIEnv *, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ JNIEnv * рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдорд╛рди JNIEnv * рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдпреВрдирд┐рдпрди рдпрд╛ рдЗрд╕рдХреЗ c ++ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рднреА std :: variant рдЕрд╕рдВрднрд╡ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп * рд╡реЗрдХреНрдЯрд░ рдпрд╛ рдПрд╕рдЯреАрдбреА :: рдХрд┐рд╕реА рднреА рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рдПрдХ atypical рдмреИрд╕рд╛рдЦреА рд╣реИред Atypical - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ c ++ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн, рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рд╛рд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЦрддрд░рдирд╛рдХ рд╣реИред
рдЖрдЧреЗ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рднрд╛рдЧ 2. рдореИрдЬрд┐рдХ рдмреБрд▓реЗрдЯ рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдп рдЯреИрдЧ
рддреЛ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдЧреАред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╕рднреА рдореИрдиреБрдЕрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдореЛрджрд┐рдд рдХреНрд▓рд╛рд╕рд┐рдХ рддрд░реАрдХрд╛, рд╕рдм рдХреБрдЫ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИред рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ, рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдк-рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЗрд╕ рд╣рдж рддрдХ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд "рдореЙрдбреНрдпреВрд▓-рдЬреИрд╕рд╛-рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕" рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ 20-30 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ "рдореЙрдбреНрдпреВрд▓-рдЕрд╕-рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕" рдХреЗ рд╕реНрддрд░ рдкрд░ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЖрдк рд╕рдлрд▓ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 500 рд╕реЗ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдпрд╣ рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдХреЛ 3-5 рдЧреБрдирд╛ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ "рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐" рдореЗрдВ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреАрдордд рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмреАрдЪ рд╕рдордЭреМрддрд╛ рдХрд░реЗрдВрдЧреЗред
рдХрд┐рд╕реА рдХреЛ рд╕рдВрджреЗрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдПрдХ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдмрддрд╛ рджреЗрдВ рдХрд┐ рдордзреНрдпрдо рд╡рд░реНрдЧ рдореЗрдВ 3-5 рд╕рджрд╕реНрдп рдФрд░ 20 рдХрд╛рд░реНрдп рдФрд░ 3 рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП 6-10 рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ (рдореНрдпреВрдЯреЗрдЯрд░)ред рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреБрд▓ рд▓рдЧрднрдЧ 40 рдЗрдХрд╛рдЗрдпрд╛рдБред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ "рдХреЗрдВрджреНрд░" рд╡рд░реНрдЧ рдХреЛ рдФрд╕рддрди рдкрд╛рдБрдЪ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рди рдХрд┐ рдПрдХ рдХреЗрдВрджреНрд░ 3 рдХреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рд╕реЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ, рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд░рдгрдиреАрддрд┐ / рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП
std::shared_ptr<CreateStreamStrategy> m_create_stream;
рдПрдХ рд╕рджрд╕реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
std::shared_ptr<CreateStreamStrategy> m_create_stream;
ред рджреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА, рддреАрди рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╛рд░рдВрднред рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ, рдЖрдкрдХреЛ
myclass->SetCreateStreamStrategy( my_create_stream_strategy )
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, 8 рдпреВрдирд┐рдЯ рдХреА рдХреБрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ / рд░рдгрдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдореЗрдВ рд╕реЗ рдкрд╛рдБрдЪ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП 40 рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реЛрдВрдЧреАред рдпрд╣реА рд╣реИ, рд╣рдордиреЗ рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рдХреЛ рджреЛ рдмрд╛рд░ рдмреЛрдЭрд┐рд▓ рдмрдирд╛ рджрд┐рдпрд╛ред рдФрд░ рд╕рд╛рджрдЧреА рдХрд╛ рдиреБрдХрд╕рд╛рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдХрд╣реАрдВ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдФрд░ рдбреЗрдврд╝ рдмрд╛рд░, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рддреЛ рд╕рд╡рд╛рд▓ рд╣реИред рдХреИрд╕реЗ рднреА рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдкрд░? рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреНрдпреВ рдФрд░ рд▓реЛрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╢реИрд▓реА рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рд╕реНрдереИрддрд┐рдХ рдкрд░рд┐рдорд╛рдгреАрдХрд░рдгред
рд╣рдо рд╢реИрд▓реА рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ
template < struct Traits > class MyClass { public: void DoMainTaskFunction() { ... MyStream stream = Traits::streamwork::Open( stream_name ); ... } };
рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рднреА рд╡рд╛рд╕реНрддреБ рдлрд╛рдпрджреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВред
рдореИрдВ рдЦреБрдж рд╢рдмреНрдмрд▓ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЦреБрдж рдкрд░ рдЕрдлрд╕реЛрд╕ рд╣реИ рдХрд┐ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ: рд╕рд╛рдзрд╛рд░рдг рдХреЛрдб рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗрд╡рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрд╛рджреВрдЧрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред "рдЯреЗрдореНрдкрд▓реЗрдЯ" рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреНрд░рд╡реНрдпрдорд╛рди рдереЛрдбрд╝рд╛ рднреНрд░реВрднрдВрдЧред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджреНрдпреЛрдЧ рдореЗрдВ, рдкреНрд▓рд╕рд╕ рдХрд╛ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд▓рд╕рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА ++ syshniks рдореЗрдВ рдереЛрдбрд╝рд╛ рдореБрдХрд░ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд▓рд╕рд╕ рдХрд╛ рдЧрд╣рд░рд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "рдЯреЗрдореНрдкрд▓реЗрдЯ" рд╢рдмреНрдж рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддреЗ рд╣реИрдВ рдФрд░ рдореГрдд рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рдЙрддреНрдкрд╛рджрди рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдерд┐рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдХреЛрдб рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рд╣рдо рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдШрд╕реАрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рд░рдгреЛрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд▓рдВрдмреА рдорд╛рдирд╡-рдкрдардиреАрдп рдЕрд▓рдорд╛рд░рд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди, рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореИрдЬрд┐рд╢рд┐рдпрди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдЪреАрдЬреЗрдВ рдЬреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬреЗрд╢рди / рд╕реНрдЯреИрдЯрд┐рдХ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдЬреНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреЙрд▓реАрдореЛрд░реНрдлрд┐рдЬреНрдо рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдЕрдВрдд рддрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдмреБрд░рд╛рдИ рдХреЛ рдирд╣реАрдВ рдорд┐рдЯрд╛рдПрдВрдЧреЗ - рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд░ рд╣рд╛рде рд╕реЗ рдирд╣реАрдВ рдлреИрд▓рд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреБрдЫ рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХрдХреНрд╖рд╛рдУрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрдВрдЧреЗред
рднрд╛рдЧ рддреАрди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдФрд░ рдХреЛрдб рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛
рддреЛ рдпрд╣рд╛рдБ !!! рдЯреЗрдВрдкрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдкреНрдбрд╕реЗрдЯ рд╕реЗ рдорд┐рд▓реЗрдВред рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╛рдо рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ рдЕрдЧрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдлрд▓ рд╡рд┐рдХрд▓реНрдк рдмрддрд╛рдпрд╛ рдЬрд╛рдПред
рдПрдХ рдкреНрд░рдХрд╛рд░ - рдПрдХ рд╡рд╕реНрддреБред рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ! рдЗрд╕рд▓рд┐рдП, рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд╣рдд рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ (рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ) рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рд╡рд╛рд╕реНрддреБ рджреЛрд╖ред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд╣рдд рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрдм рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╣реАрдВ рд╣реИрдВ: рдпреЗ рдпрд╛ рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдЪрд░ рд╣реИрдВ, рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдпрд╛ рджреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред ред
рд╣рдо рддреАрди рдореВрд▓ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ: рдХреНрд░рд┐рдПрдЯ, рдЧреЗрдЯ рдПрдВрдб рд╣рд╕ред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рд░рд╕реАрдж рдФрд░ рд╕рддреНрдпрд╛рдкрдиред
рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдХреНрдпреВрдЯреА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рджреЗрдЦрд╛ред рд╡рд╣рд╛рдВ, рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "рдореИрдк" рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╡рд░реНрди рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рд▓рд╛рдЗрди (!!!) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдФрд░ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GlobalConfigurator()["FileSystem"].Get().As<FileSystem>()
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдВрдмрд╛рдИ рдФрд░ рдЖрдЧреЗ рдХреА рд╣реИрд╢рд┐рдВрдЧ рдХреЛ рдЧрд┐рдирдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдореЗрд░реА рдЖрд╢рд╛рд╡рд╛рджреА рдЖрддреНрдорд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рдпрд╣рд╛рдВ, рдУрд╡рд░рд╣реЗрдб рд╢реВрдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЪреБрдирд╛рд╡ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
TypedSet рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо StrategiesSet рдХреНрд▓рд╛рд╕ рдХреЛ рдХреНрд░рд╛рдлреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╣реИред рдЗрд╕рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐ рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП (рдмрд╛рдж рдореЗрдВ рд░рдгрдиреАрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд╛рдЗрдкрд╕реЗрдЯ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ: рдкреИрд░рд╛рдореАрдЯрд░, рдлрд╝рдВрдХреНрд╢рди рдЪрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдмрд╛рд░ рдмрдбрд╝реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рди рдХреЗ рд▓рд┐рдПред рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЙрдирдореЗрдВ рд╣реИ рдХрд┐ рд╣рдо рдкреВрд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдЖрд╢реНрд░рд┐рдд рд░рд╕реЛрдИрдШрд░ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдФрд░ рдЕрдзрд┐рдХ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ: рдХреНрд░рд┐рдПрдЯ, рдЧреЗрдЯ, рдХреНрд░реЗрдЯрдкрд░рд╛рдорд╕реЗрдЯ рдФрд░ рдЧреЗрдЯрдкрд░рд╛рдорд╕реЗрдЯред рд░рдЦреА рдирд╣реАрдВ рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓реА рдмреЗрдорд╛рдиреА рд╣реИ: рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдиреЗ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдпрд╛ рдЬреЛрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛
sebukka рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдмреЙрд░реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
class StrategiesSet { public: template <class Strategy> void Create( const std::shared_ptr<Strategy> & value ); template <class Strategy> std::shared_ptr<Strategy> Get(); template <class Strategy> void CreateParamsSet(); template <class Strategy> std::shared_ptr<TypedSet> GetParamsSet(); template <class Strategy, class ParamType> void CreateParam( const std::shared_ptr<ParamType> & value ); template <class Strategy, class ParamType> std::shared_ptr<ParamType> GetParam(); protected: TypedSet const & strategies() const { return strategies_; } TypedSet & get_strategies() { return strategies_; } TypedSet const & params() const { return params_; } TypedSet & get_params() { return params_; } template <class Type> struct ParamHolder { ParamHolder( ) : param_ptr( std::make_shared<TypedSet>() ) {} std::shared_ptr<TypedSet> param_ptr; }; private: TypedSet strategies_; TypedSet params_; }; template <class Strategy> void StrategiesSet::Create( const std::shared_ptr<Strategy> & value ) { get_strategies().Create<Strategy>( value ); } template <class Strategy> std::shared_ptr<Strategy> StrategiesSet::Get() { return get_strategies().Get<Strategy>(); } template <class Strategy> void StrategiesSet::CreateParamsSet( ) { typedef ParamHolder<Strategy> Holder; std::shared_ptr< Holder > ptr = std::make_shared< Holder >( ); ptr->param_ptr = std::make_shared< TypedSet >(); get_params().Create< Holder >( ptr ); } template <class Strategy> std::shared_ptr<TypedSet> StrategiesSet::GetParamsSet() { typedef ParamHolder<Strategy> Holder; if ( get_params().Has< Holder >() ) { return get_params().Get< Holder >()->param_ptr; } else { LogError("StrategiesSet::GetParamsSet : get unexisting!!!"); return std::shared_ptr<TypedSet>(); } } template <class Strategy, class ParamType> void StrategiesSet::CreateParam( const std::shared_ptr<ParamType> & value ) { typedef ParamHolder<Strategy> Holder; if ( !params().Has<Holder>() ) CreateParamsSet<Strategy>(); if ( params().Has<Holder>() ) { std::shared_ptr<TypedSet> params_set = GetParamsSet<Strategy>(); params_set->Create<ParamType>( value ); } else { LogError( "Param creating error: Access Violation" ); } } template <class Strategy, class ParamType> std::shared_ptr<ParamType> StrategiesSet::GetParam() { typedef ParamHolder<Strategy> Holder; if ( params().Has<Holder>() ) { return GetParamsSet<Strategy>()->template Get<ParamType>();
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪрд░рдг рдореЗрдВ рдЖрдк рдПрдХ рд╕реБрдкрд░-рдмрдбрд╝реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд▓реНрджреА рдЫреЛрдЯреЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЪреБрдкрдЪрд╛рдк рдЗрд╕реЗ рдЙрди рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдЦреИрд░, рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ (рдЕрднреА рддрдХ) рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд▓реАрдХреГрдд рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореБрдЭреЗ рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рд▓реЗрдЦ рдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрдиреНрдирдпрди рдмрдирд╛рдКрдВрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЬреНрдЮрд╛рди рдХрд╣рддрд╛ рд╣реИ, "рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рд░рд┐рд▓реАрдЬ рдХрд░реЗрдВ рдФрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВред"
class Interface1 { public: virtual void Fun() { printf("\niface1\n");} virtual ~Interface1() {} }; class Interface2 { public: virtual void Fun() { printf("\niface2\n");} virtual ~Interface2() {} }; class Interface3 { public: virtual void Fun() { printf("\niface3\n");} virtual ~Interface3() {} }; class Implementation1 : public Interface1 { public: virtual void Fun() override { printf("\nimpl1\n");} }; class Implementation2 : public Interface2 { public: virtual void Fun() override { printf("\nimpl2\n");} }; class PrintParams { public: virtual ~PrintParams() {} virtual std::string GetOs() = 0; }; class PrintParamsUbuntu : public PrintParams { public: virtual std::string GetOs() override { return "Ubuntu"; } }; class PrintParamsWindows : public PrintParams { public: virtual std::string GetOs() override { return "Windows"; } }; class PrintStrategy { public: virtual ~PrintStrategy() {} virtual void operator() ( const TypedSet& params, const std::string & str ) = 0; }; class PrintWithOsStrategy : public PrintStrategy { public: virtual void operator()( const TypedSet& params, const std::string & str ) override { auto os = params.Get< PrintParams >()->GetOs(); printf(" Printing: %s (OS=%s)", str.c_str(), os.c_str() ); } }; void TestTypedSet() { using namespace std; TypedSet a; a.Create<Interface1>( make_shared<Implementation1>() ); a.Create<Interface2>( make_shared<Implementation2>() ); a.Get<Interface1>()->Fun(); a.Get<Interface2>()->Fun(); Log("Double creation:"); a.Create<Interface1>( make_shared<Implementation1>() ); Log("Get unexisting:"); a.Get<Interface3>(); } void TestStrategiesSet() { using namespace std; StrategiesSet printing; printing.Create< PrintStrategy >( make_shared<PrintWithOsStrategy>() ); printing.CreateParam< PrintStrategy, PrintParams >( make_shared<PrintParamsWindows>() ); auto print_strategy_ptr = printing.Get< PrintStrategy >(); auto & print_strategy = *print_strategy_ptr; auto & print_params = *printing.GetParamsSet< PrintStrategy >(); print_strategy( print_params, "Done!" ); } int main() { TestTypedSet(); TestStrategiesSet(); return 0; }
рд╕рд╛рд░рд╛рдВрд╢
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреА: рд╣рдордиреЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬреЛ рд╕реАрдзреЗ рдХрдХреНрд╖рд╛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдмрд╛рдХреА рдХреЛ рд╕реНрдЯреНрд░реИрдЯреЗрдЬреАрдЬрд╝рд╕реЗрдЯ рдореЗрдВ "shoved" рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрдмрдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рд░рд╣рд╛ рдерд╛, рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ "рдХреБрдЫ" рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╢реНрд░реЗрд╖реНрда" рдереЗред рдпрд╣ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЕрддреНрдпрдзрд┐рдХ рдЕрдЫреВрддрд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рд╢реВрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рд╕рдордп рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреАред
рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЙрдкрдХрд░рдг рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИредUpdред 11/13/2019 рд╕реЗрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд┐рдб () рд╣реИрд╢_рдХреЛрдб рдЖрдзреБрдирд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдФрд░ рдЕрдХреНрд╖рдо рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд░реНрде рдХреЛ рдмрд╣реБрдд рдорд╛рд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╕рдореНрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
0xd34df00d рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ , рдорд╛рдирдХ
рд╣реИрд╢рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдврд╝рд╛ рд╣реИред рдореИрдВрдиреЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП ()ред Hash_code (), рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдирдХреНрд╢рд╛ (рд▓реЗрдХрд┐рди #if рдореЗрдВ рдПрдХ рдЕрдВрдХ рдмрджрд▓рдХрд░ рдЬрд▓реНрджреА рд╕реЗ рдирдХреНрд╢реЗ рд╕реЗ рд╕рд░рдгреА рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред рдпрд╣ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдХреЛрд▓реАрд░реВ рдореЗрдВ namespace metatype { struct Counter { size_t GetAndIncrease() { return counter_++; } private: size_t static inline counter_ = 1; }; template <typename Type> struct HashGetterBody { HashGetterBody() : hash_( counter_.GetAndIncrease() ) { } size_t GetHash() { return hash_; } private: Counter counter_; size_t hash_; }; template <typename Type> struct HashGetter { size_t GetHash() {return hasher_.GetHash(); } private: static inline HashGetterBody<Type> hasher_; }; }
рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪ рдХреЛ рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯрд╛рдЗрдк рд╣реИрд╢ рдХреЛ рдореБрдЦреНрдп () рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдиреБрдХрд╕рд╛рди рдХреЗрд╡рд▓ рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред