C ++ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА

рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП C ++ рднрд╛рд╖рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдПрдХ рдХреЙрдкреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдорд▓реЛрдВ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдХреЛ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ std :: рд╡реЗрдХреНрдЯрд░ рдпрд╛ std :: stringред

рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдпрд╣ == рдФрд░! = рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реА ++ рд╕рдВрдХрд▓рдХ, рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдРрд╕рд╛ рд╕рдВрдЧрдарди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЦрддрд░рдирд╛рдХ рд╣реИред рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддреБрд▓рдирд╛ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдХрдард┐рди рдирд┐рджрд╛рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ (* .h рдФрд░ * .cpp) рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред

C ++ рдореЗрдВ рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рдФрд░ рдХреМрди рд╕реЗ рд╕рджрд╕реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

2000 рдХреЗ рджрд╢рдХ рдХреЗ рдордзреНрдп рдореЗрдВ, рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдирддреАрдЬрддрди, рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реА ++ рдирд┐рд░реНрдорд╛рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рд╢рдмреНрдж-рджрд░-рд╢рдмреНрдж рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрд╛рдж рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдиреЗ рдЕрдиреНрдп рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛: рдбреЗрдЯрд╛ рдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рддрд╛ рд╣реВрдВред
рдЕрдиреНрдп рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди

рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ:
  1. рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧред рд╕рд╛рдорд╛рдиреНрдп рд╕реА ++ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╖рдо рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows OLE рд╕реЗ VARIANT рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд╕рджрд╕реНрдп рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдо, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рдордп рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧрддреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ object.member_name рдпрд╛ pObject-> рд╕рджрд╕реНрдп_рдирд╛рдо рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рдХреБрдЫ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред (тАЬрд╕рджрд╕реНрдп_рдирд╛рдотАЭ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдореЗрдВ рдПрдХ рд░реИрдЦрд┐рдХ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ: рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирд┐рдпрдорд┐рдд (рд╕реНрдерд┐рд░) рд╕рдВрд░рдЪрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИред
  2. рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░, рдЕрд░реНрдерд╛рддреН рдмрдврд╝рд╛рд╡рд╛ :: рдлреНрдпреВрдЬрди :: рдореИрдк рдХрдВрдЯреЗрдирд░ред рдпрд╣рд╛рдВ, рд╕рднреА рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрд╛ред рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: at_key <рд╕рджрд╕реНрдп_рдиреЗрдореА> (рдСрдмреНрдЬреЗрдХреНрдЯ)ред
  3. C ++ рдХреЛрдб рдЬрдирд░реЗрд╢рдиред C ++ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЖрджрд░реНрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдореИрдХреНрд░реЛ рд╕реЙрд▓реНрдпреВрд╢рди

рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЙрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рд╣реИрдВ:

рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрди рд╕рд╛рдзрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ:
struct MANPARAMS { std::string name; int age; std::vector<std::string> friend_names; double karma; }; 

рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯрд░реНрдо рдСрдкрд░реЗрд╢рди рд╡рд╛рд▓реА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ:
 class AUTO_MANPARAMS { PARAMSTRUCT_DECLARE_BEGIN(AUTO_MANPARAMS); public: DECLARE_MEMBER_PARAMSTRUCT(std::string, name); DECLARE_MEMBER_PARAMSTRUCT(int, age); DECLARE_MEMBER_PARAMSTRUCT(std::vector<std::string>, friend_names); DECLARE_MEMBER_PARAMSTRUCT(double, karma); }; 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ * .cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореИрдХреНрд░реЛ рдХреЙрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 PARAMFIELD_IMPL(AUTO_MANPARAMS); 

рд╡рд╣ рд╕рдм рд╣реИ! рдЕрдм рдЖрдк рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдЪрд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рдорд╛рдирддрд╛ рдпрд╛ рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 void men(void) { AUTO_MANPARAMS man1, man2; man1.name = тАЬJohn SmithтАЭ; man1.age = 18; man1.karma = 0; man2.name = тАЬJohn DoeтАЭ; man2.age = 36; man2.karma = 1; man2.friends.push_back(тАЬSergud SmithтАЭ); if(man1 == man2) printf(тАЬKu-ku!\nтАЭ); } 

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ PARAMSTRUCT_DECLARE_BEGIN (x) рдореИрдХреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрдерд┐рд░ рд╕реЗрд╡рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рджрд╕реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, рджреВрд╕рд░реЗ рдореИрдХреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, DECLARE_MEMBER_PARAMSTRUCT (рдкреНрд░рдХрд╛рд░, рдирд╛рдо), рдЬреЛ рд╕рджрд╕реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕реЗрд╡рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдЪрд╛рд░:

1. рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдСрдЯреЛ-рдкреАрдврд╝реА

рдРрд╕рд╛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╕рджрд╕реНрдп рд╣реИ рдФрд░ "рдЗрд╕рдХреЗ" рдбреЗрдЯрд╛ рд╕рджрд╕реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореИрдХреНрд░реЛ DECLARE_MEMBER_PARAMSTRUCT (рдкреНрд░рдХрд╛рд░, рдирд╛рдо) рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:
 bool comp##name(const ThisParamFieldClass& a) const \ { \ return name == a.name; \ } \ 

рдЬрд╣рд╛рдБ ThisParamFieldClass рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╣реЗрдб рдореИрдХреНрд░реЛ рдореЗрдВ рдЯрд╛рдЗрдкрдбрд┐рдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдиреАрдЪреЗ рджреЗрдЦреЗрдВред

2. рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рд╕рд░рдгреА

рд╣реЗрдб рдореИрдХреНрд░реЛ PARAMSTRUCT_DECLARE_BEGIN (x) рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдРрд░реЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ:
 #define PARAMSTRUCT_DECLARE_BEGIN(x) \ private: \ typedef x ThisParamFieldClass; \ typedef bool (ThisParamFieldClass::*ComFun)(const ThisParamFieldClass& a) const; \ struct MEM_STAT_DATA \ { \ std::string member_name; \ ComFun comfun; \ }; \ 

рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд░рдгреА рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:

 static std::vector<MEM_STAT_DATA> stat_data; \ 


рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рднреА рдпрд╣рд╛рдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 public: \ bool operator==(const ThisParamFieldClass& a) const; \ bool operator!=(const ThisParamFieldClass& a) const { return !operator==(a); } \ 

рдПрдХ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдореИрдХреНрд░реЛ (PARAMFIELD_IMPL) рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рднрд░реЗ рд╣реБрдП stat_data рд╕рд░рдгреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рддреБрдЪреНрдЫ рд╣реИ: рдЖрдкрдХреЛ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдХреЗрд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрдкрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рди рдХреЗрд╡рд▓ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирд╡ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рд▓реЛрдб рдХрд░рдирд╛ред

3. рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдореЗрдВ рднрд░рдирд╛

рдпрд╣ рд╕рд░рдгреА stat_data рдХреЛ рднрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЪреВрдВрдХрд┐ рд╕рджрд╕реНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ DECLARE_MEMBER_PARAMSTRUCT рдореИрдХреНрд░реЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд╣реАрдВ рднреА рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ (рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ) рдЖрдмрд╛рдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрд╕рдЯреАрдбреА :: рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рд╣реИ - рдпрд╣ рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ stat_data рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
 class cl##name \ { \ public: \ cl##name(void) \ { \ if(populate_statdata) \ { \ MEM_STAT_DATA msd = \ { \ #name, \ &ThisParamFieldClass::comp##name \ }; \ stat_data.push_back(msd); \ } \ } \ }; \ cl##name ob##name; 


рдЬрд╣рд╛рдБ populate_statdata рдПрдХ рд╕реНрдереИрддрд┐рдХ рдзреНрд╡рдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣реЗрдб рдореИрдХреНрд░реЛ рдФрд░ рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ stat_data рд╕рд░рдгреА рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рддреБрд▓рдирд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рднрд░реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рддрдВрддреНрд░ populate_statdata = true рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рд╕рджрд╕реНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рднрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, populate_statdata = false рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рджрд╕реНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд╕рд░рдгреА рдЕрдм рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рд░ рдмрд╛рд░ рдХреБрдЫ рд╕рдордп рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо populate_statdata рдзреНрд╡рдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдирд╣реАрдВ рдмрдврд╝рддреА рд╣реИ: рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, populate_statdata: рдлреНрд▓реИрдЧ рдХрдВрдЯреНрд░реЛрд▓ рддрдВрддреНрд░ рдХреЛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣реЗрдб рдореИрдХреНрд░реЛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 class VcfInitializer \ { \ public: \ VcfInitializer(void); \ }; \ static VcfInitializer vcinit; 

рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди PARAMFIELD_IMPL (x) рдореИрдХреНрд░реЛ рдореЗрдВ рд╣реИ:
 x::VcfInitializer::VcfInitializer(void) \ { \ x::populate_statdata = true; \ ThisParamFieldClass dummy; \ x::populate_statdata = false; \ } \ 


рдкреВрд░реНрдг рд╕реНрдереВрд▓ рдкрд╛рда

 #define PARAMSTRUCT_DECLARE_BEGIN(x) \ private: \ typedef x ThisParamFieldClass; \ typedef bool (ThisParamFieldClass::*ComFun)(const ThisParamFieldClass& a) const; \ struct MEM_STAT_DATA \ { \ std::string member_name; \ ComFun comfun; \ }; \ static std::vector<MEM_STAT_DATA> stat_data; \ static bool populate_statdata; \ public: \ bool operator==(const ThisParamFieldClass& a) const; \ bool operator!=(const ThisParamFieldClass& a) const { return !operator==(a); } \ private: \ class VcfInitializer \ { \ public: \ VcfInitializer(void); \ }; \ static VcfInitializer vcinit; #define DECLARE_MEMBER_PARAMSTRUCT(type,name) \ public: \ type name; \ private: \ bool comp##name(const ThisParamFieldClass& a) const \ { \ return name == a.name; \ } \ class cl##name \ { \ public: \ cl##name(void) \ { \ if(populate_statdata) \ { \ MEM_STAT_DATA msd = \ { \ #name, \ &ThisParamFieldClass::comp##name, \ }; \ stat_data.push_back(msd); \ } \ } \ }; \ cl##name ob##name; #define PARAMFIELD_IMPL(x) \ std::vector<x::MEM_STAT_DATA> x::stat_data; \ bool x::populate_statdata = false; \ x::VcfInitializer x::vcinit; \ x::VcfInitializer::VcfInitializer(void) \ { \ x::populate_statdata = true; \ ThisParamFieldClass dummy; \ x::populate_statdata = false; \ } \ bool x::operator==(const x& a) const \ { \ bool r = true; \ for(size_t i=0; r && i<stat_data.size(); i++) \ { \ r = (this->*stat_data[i].comfun)(a); \ } \ return r; \ } 

рдирд┐рд╖реНрдХрд░реНрд╖

рдЙрдкрд░реЛрдХреНрдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдФрд░ рдЕрдиреНрдп рд╢рдмреНрджрд╛рд╡рд▓реА рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ред рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддреА рд╣реИред рдмрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдЙрд╕ рд╕рджрд╕реНрдп рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛, рдмрдЪрдд рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In148348/


All Articles